NET中的xslt解析
考虑以下xml代码片段NET中的xslt解析,xslt,xslt-2.0,xslcompiledtransform,Xslt,Xslt 2.0,Xslcompiledtransform,考虑以下xml代码片段 <rootnode> <child id="child1" ><![CDATA[child 1]]></child> <child id="child2" ><![CDATA[child 2]]></child> <child id="child3" ><![CDATA[child 3]]></child> <chi
<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>
我想使用xslt遍历所有id类似于“child”的子对象。如何实现这一点?您的xslt将
<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>
... 在这里做你的事。。。。
您也可以使用以开头的功能参见
作为完整的参考值得学习的是,不要在XSLT中只针对每个循环使用一个for-each循环—这是一种针对同一事物的模板匹配方法:
<xsl:template match="/rootnode">
<xsl:apply-template select="child[starts-with(@id, 'child')]" />
</xsl:template>
<xsl:template match="child">
<!-- Do stuff -->
</xsl:template>
关键点是方括号中的xpath查询——这也是ajay_whiz为for-each循环提出的建议。为了提高效率,您可以定义一个键并使用它,例如
<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>
...
我只想遍历id类似“child”的子节点,即它应该只返回我的子节点[child1,child2,child3,child3,child4,child5,child6]我得到了您的解决方案,但我有2000多个子节点。如果没有其他方法,我会说“有总比没有好”,谢谢你的回答。@Amit不确定你是否可以做一些事情,比如只做一个注释:问题被标记为xslt-2.0和xslcompiledtransform,但xslcompiledtransform只支持xslt 1.0。+1这是一个好答案。但是,如果没有必要,不要为每个指令推荐。