我想计算 XML 中两个节点之间存在的节点。下面是一个演示 XML。
<?xml version="1.0" encoding="UTF-8"?>
<body>
<a></a>
<b></b>
<b></b>
<b></b>
<a></a>
<b></b>
<a></a>
<a></a>
<b></b>
<b></b>
<a></a>
</body>
我正在使用下面的 XSLT。
<xsl:template match="a">
<xsl:text>Number of B </xsl:text>
<xsl:value-of select="count(preceding::a[1]/following::b)"/>
</xsl:template>
我目前的输出。
<body>
Number of B 0
<b></b>
<b></b>
<b></b>
Number of B 6
<b></b>
Number of B 3
Number of B 2
<b></b>
<b></b>
Number of B 2
</body>
但是我的预期输出如下。
<body>
Number of B 0
<b></b>
<b></b>
<b></b>
Number of B 3
<b></b>
Number of B 1
Number of B 0
<b></b>
<b></b>
Number of B 2
</body>
这里基本上我想在每个
a
之间进行计数。
这是工作示例
您可以做的是创建一个键,将
b
元素链接到下面的第一个 a
元素
<xsl:key name="b" match="b" use="generate-id(following-sibling::a[1])" />
然后您可以计算当前
b
元素之前的 a
元素,如下所示:
<xsl:value-of select="count(key('b', generate-id()))"/>
尝试这个 XSLT
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" indent="yes" />
<xsl:key name="b" match="b" use="generate-id(following-sibling::a[1])" />
<xsl:template match="a">
<xsl:text>Number of B </xsl:text>
<xsl:value-of select="count(key('b', generate-id()))"/>
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
您可以计算以下
b
的数量,并减去以下b
之后的a
的数量:
<xsl:template match="a">
<xsl:text>Number of B </xsl:text>
<xsl:value-of select="count(following::b) - count(following::a/following::b)"/>
</xsl:template>