嗨,我是一个更新鲜的人,如果你回答我的问题会很有帮助。
考虑我的XML
<A>
<B>
<b1>a</b1>
<b2>b</b2>
</B>
<C>
<c1>a</c1>
<c2>b</c2>
</C>
</A>.
在XSLT中,我需要找出节点B和C的子子节点数。 如果B中有2个子节点,则XSLT动态打印#1 a和#2 b。 同样,如果有n个孩子#1值,#2值............ #n值。 请帮忙解决这个问题。我需要针对上述条件的XSLT设计代码。
答案 0 :(得分:0)
要“动态”输出元素的值,并将子项的“数字”作为前缀,您可以使用xsl:value-of select="position()"/>
假设你的输出应该是文本(而不是xml),试试这个:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:output method="text" indent="yes" />
<xsl:strip-space elements="*"/>
<xsl:template match="*" mode ="printChildNr" >
<!-- children of B or C-->
<xsl:text>children of </xsl:text>
<xsl:value-of select="name()"/>
<xsl:text>: </xsl:text>
<xsl:for-each select="*" >
<xsl:text>#</xsl:text>
<xsl:value-of select="position()"/>
<xsl:text> </xsl:text>
<!-- text content of child-->
<xsl:value-of select="text()"/>
<xsl:text> </xsl:text>
</xsl:for-each>
</xsl:template>
<xsl:template match="/*" >
<xsl:apply-templates select="B | C" mode="printChildNr"/>
</xsl:template>
</xsl:stylesheet>
mode="printChildNr"
不是必需的,但如果必须扩展xlt可能会有所帮助。
输入:
<?xml version="1.0" encoding="utf-8" ?>
<A>
<B>
<b1>a</b1>
<b2>b</b2>
</B>
<C>
<c1>a</c1>
<c2>b</c2>
<c3>b</c3>
</C>
</A>
输出:
children of B:
#1 a
#2 b
children of C:
#1 a
#2 b
#3 b