xslt dans .NET Parsing
-
29-09-2019 - |
Question
Considérez suivant extrait de code XML.
<rootnode>
<child id="child1" ><![CDATA[child 1]]></child>
<child id="child2" ><![CDATA[child 2]]></child>
<child id="child3" ><![CDATA[child 3]]></child>
<child id="child4" ><![CDATA[child 4]]></child>
<child id="child5" ><![CDATA[child 5]]></child>
<child id="child6" ><![CDATA[child 6]]></child>
<child id="A1" ><![CDATA[A 1]]></child>
<child id="A2" ><![CDATA[A 2]]></child>
<child id="A3" ><![CDATA[A 3]]></child>
<child id="A4" ><![CDATA[A 4]]></child>
<child id="A5" ><![CDATA[A 5]]></child>
<child id="A6" ><![CDATA[A 6]]></child>
</rootnode>
Je veux itérer à travers tout l'enfant ayant comme id 'enfant en utilisant xslt.
Comment puis-je obtenir cela?
La solution
Il vaut la peine d'apprendre à non seulement atteindre une pour chaque boucle dans XSLT - c'est une approche de mise en correspondance de modèle à la même chose:
<xsl:template match="/rootnode">
<xsl:apply-template select="child[starts-with(@id, 'child')]" />
</xsl:template>
<xsl:template match="child">
<!-- Do stuff -->
</xsl:template>
La clé bit est la requête XPath entre crochets - quelque chose qui ajay_whiz a également suggéré pour la boucle for-each
.Autres conseils
Votre xslt sera
<xsl:template match="/rootnode">
<xsl:for-each select="child">
<xsl:if test="contains(@id,'child')">
... do your stuff here....
</xsl:if>
</xsl:for-each>
</xsl:template>
Vous pouvez également utiliser la fonction starts-with
voir http://www.w3schools.com/xpath/ xpath_functions.asp
pour la référence complète
Pour plus d'efficacité, vous pouvez définir une clé et de l'utilisation que par exemple.
<xsl:key name="k1" match="child" use="starts-with(@id, 'child')"/>
<xsl:template match="rootnode">
<xsl:for-each select="key('k1', true())">
...
</xsl:for-each>
</xsl:template>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow