鉴于下面的简化XML,我需要计算/ root / a /下有1个以上节点的节点数。因此,即使总共有8个节点,对我来说正确的答案是3,因为第一个和最后一个/ root / a的总数超过1,3。我在这里得到的xslt只会给我值8。我已经看过使用键,位置函数等的操作失败了……但是我认为可能有更简单的答案。感谢您的帮助。
<root>
<a>
<b>
<c>valuex</c>
</b>
<b>
<c>valuey</c>
</b>
</a>
<a>
<b>
<c>valuez</c>
</b>
</a>
<a>
<b>
<c>valuex</c>
</b>
</a>
<a>
<b>
<c>valuex</c>
</b>
</a>
<a>
<b>
<c>valuex</c>
</b>
<b>
<c>valuey</c>
</b>
<b>
<c>valuey</c>
</b>
</a>
<a>
</a>
</root>
我的样式表
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:variable name="addCount">
<xsl:choose>
<xsl:when test="/root/a/b">
<xsl:value-of select="count(/root/a/b)"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="0"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:value-of select="$addCount"/>
</xsl:template>
</xsl:stylesheet>
答案 0 :(得分:0)
根据您的评论,听起来好像您要查找b
的子元素/root/a
的计数,但不是每个元素下的第一个b
元素a
元素。
您可以使用以下内容选择b
的子元素中的所有/root/a
元素,并从每个集合中排除第一个b
:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:value-of select="count(/root/a/b[position() > 1])"/>
</xsl:template>
</xsl:stylesheet>
您还可以使用以下命令获取所有b
元素为preceding-sibling
的{{1}}元素的计数:
b
答案 1 :(得分:0)
如果我正确理解了您的澄清(如果这样的话,那就太好了!),您想这样做:
<xsl:template match="/root">
<xsl:variable name="a" select="a[count(b) > 1]" />
<xsl:value-of select="count($a/b) - count($a)"/>
</xsl:template>
可以缩写为:
<xsl:template match="/root">
<xsl:value-of select="count(a/b[position() != 1])"/>
</xsl:template>