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?

Était-ce utile?

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
scroll top