【发布时间】:2018-11-17 02:39:16
【问题描述】:
鉴于以下简化的 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>
【问题讨论】:
-
为什么拥有超过 1 个子元素的
a元素的计数不是 2?我不明白你为什么认为它会是 3,除非你想要拥有超过 1 个子元素的a元素的子元素计数的 max() 值? -
你说第1个和第5个a元素算作两个,所以总共是3个……嗯?您始终可以将计数加 1,但如果有两个符合您的条件,为什么计数为 3?
-
好的,我想我明白了。您想要不是第一个子
b元素的b元素的计数吗?因此,在具有多个b元素的两个a元素中,第一个元素中有 2 个b元素,第五个b元素有 3 个a元素,总共有 5 个,从每个元素中排除第一个b元素,所需的计数为 3。
标签: xslt