Xslt Parsing in .NET
-
29-09-2019 - |
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?
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