Transformer Xml en utilisant Xslt
-
06-09-2019 - |
Question
J'ai le code XML suivant:
<?xml version="1.0" encoding="utf-8" ?>
<ApplicationSettingCategories>
<Category>Cat1</Category>
<Category>Cat2</Category>
<Category>Cat3</Category>
<Category>Cat4</Category>
<Category>Cat5</Category>
<Category>Cat6</Category>
</ApplicationSettingCategories>
Je suis en train de lier ce Xml à un DROPDOWNLIST à l'aide d'un ASP.net XmlDataSource et Xslt. Ceci est ma première fois faire. Le DROPDOWNLIST montre le nombre correct d'éléments vides, me conduit à croire l'itération fonctionne, mais les valeurs et le texte sont vides.
Toute aide à identifier mon erreur serait apprécié.
Merci
Mon XLST
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="ApplicationSettingCategories">
<Categories>
<xsl:apply-templates select="Category"/>
</Categories>
</xsl:template>
<xsl:template match="Category">
<Category>
<xsl:attribute name="Category">
<xsl:value-of select="Category"/>
</xsl:attribute>
</Category>
</xsl:template>
Mon ASPX
<asp:DropDownList ID="ddl1" runat="server" DataSourceID="XmlDataSource1"
DataTextField="Category" DataValueField="Category" />
<asp:XmlDataSource ID="XmlDataSource1" runat="server"
DataFile="~/App_Data/Xml/SettingCategory.xml"
TransformFile="~/Schema/AppCategoryXSLT.xslt"></asp:XmlDataSource>
Ma Source Voir
<select name="ddl1" id="ddl1">
<option value=""></option>
<option value=""></option>
<option value=""></option>
<option value=""></option>
<option value=""></option>
<option value=""></option>
</select>
La solution
Cette ligne est votre problème:
<xsl:value-of select="Category"/>
A ce moment (à l'intérieur du gabarit de Category
), le noeud de contexte est la catégorie actuelle. Le sélecteur que vous avez sur votre xsl:value-of
recherche un élément enfant du noeud contextuel aussi appelé Category
. Il suffit de changer cette ligne pour obtenir la valeur texte du noeud contextuel à la place:
<xsl:value-of select="text()"/>