XSLT di analisi in .NET
-
29-09-2019 - |
Domanda
Si consideri seguente frammento di codice per 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>
Voglio per scorrere tutto il bambino che id come 'figlio' utilizzando XSLT.
Come posso ottenere questo?
Soluzione
La sua pena di imparare non solo di raggiungere per una per ogni ciclo in XSLT - questo è un approccio modello di corrispondenza per la stessa cosa:
<xsl:template match="/rootnode">
<xsl:apply-template select="child[starts-with(@id, 'child')]" />
</xsl:template>
<xsl:template match="child">
<!-- Do stuff -->
</xsl:template>
Il bit chiave è la query XPath tra parentesi quadre - qualcosa che ajay_whiz suggerito anche per la for-each ciclo
.Altri suggerimenti
Il tuo XSLT sarà
<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>
È inoltre possibile utilizzare la funzione starts-with
vedere http://www.w3schools.com/xpath/ xpath_functions.asp
per riferimento completo
Per l'efficienza si potrebbe definire una chiave e l'uso che per es.
<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>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow