Comment est-ce que je ne tire que les nœuds qui ont nom qui commencent par "tag" et se terminent par "DescRes"? J'utilise XMLDataSource et GridView (ASP.NET 3.5) pour afficher le XML. Rien d'extraordinaire. Si les valeurs doivent être codées en dur dans le XSLT, c'est bien aussi.Comment filtrer les données par attribut en utilisant XSLT?
<data name="tagoneCtrlNumberRes.Text" xml:space="preserve">
<value>1.</value>
<comment>A01</comment>
</data>
<data name="tagoneCtrlDescRes.Text" xml:space="preserve">
<value>Hello</value>
<comment>A01</comment>
</data>
<data name="tagoneCtrlNoteRes.Text" xml:space="preserve">
<value>Hi</value>
<comment>A01</comment>
</data>
Si je commence avec ce XML, je voudrais que le XML résultant après le XSLT est appliqué à montrer:
<data name="tagoneCtrlDescRes.Text" xml:space="preserve">
<value>Hello</value>
<comment>A01</comment>
</data>
Voici mon XSLT:
<?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:param name="sortby"></xsl:param>
<xsl:param name="orderas"></xsl:param>
<xsl:output method="xml" indent="yes"/>
<!--<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>-->
<xsl:template match="root">
<root>
<xsl:apply-templates select="data">
<xsl:sort select="*[name()=$sortby]|@*[name()=$sortby]" data-type="text" order="{$orderas}"/>
</xsl:apply-templates>
</root>
</xsl:template>
<xsl:template match="data">
<data>
<xsl:attribute name="comment">
<xsl:value-of select="comment" />
</xsl:attribute>
<xsl:attribute name="ctrlname">
<xsl:value-of select="@name"/>
</xsl:attribute>
<xsl:attribute name="value">
<xsl:value-of select="value" />
</xsl:attribute>
</data>
</xsl:template>
</xsl:stylesheet>
Bonne question, +1. Voir ma réponse pour une solution d'expression XPath 1.0 d'une ligne et sa vérification complète basée sur XSLT 1.0. Une explication détaillée est fournie. –