Frage

Betrachten Sie folgende Snippet-Code für 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>

Ich möchte durchlaufen alle das Kind ID mit wie ‚Kind‘ mit xslt.
Wie erreiche ich das?

War es hilfreich?

Lösung

Es lohnt sich zu lernen, nicht nur für eine Reichweite für jede Schleife in XSLT - dies ist ein Template-Matching-Ansatz auf die gleiche Sache:

<xsl:template match="/rootnode">
    <xsl:apply-template select="child[starts-with(@id, 'child')]" />
</xsl:template>

<xsl:template match="child">
    <!-- Do stuff -->
</xsl:template>

Der Schlüssel Bit ist die XPath-Abfrage in eckigen Klammern - etwas, dass ajay_whiz auch vorgeschlagen, für das for-each-Schleife

.

Andere Tipps

Ihre Xslt werden

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

Sie können auch starts-with Funktion finden Sie unter http://www.w3schools.com/xpath/ xpath_functions.asp für die vollständige Referenz

Für Effizienz Sie einen Schlüssel und verwenden, die z definieren könnte.

<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>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top