使用XSL计算XML中的端点

时间:2010-03-31 09:03:25

标签: xml xslt

我希望能够使用XSL计算XML文件中的“端点”。 根据端点,我指的是没有包含数据的子项的标记。

<xmlsnippet> 
    <tag1>NOTENOUGHDAYS</tag1> 
    <tag2>INVALIDINPUTS</tag2> 
    <tag3> 
        <tag4> 
            <tag5>2</tag5> 
            <tag6>1</tag6> 
        </tag4> 
    </tag3> 
</xmlsnippet> 

这个XML应该返回4,因为有4个“端点”

3 个答案:

答案 0 :(得分:6)

<xsl:template match="/>
  <xsl:value-of select="count(//*[not(*) and normalize-space() != ''])" />
</xsl:template>

通过后代轴(//)递归整个XML树,查看没有子元素节点(*)并包含其他数据的所有元素节点(not(*))比空白(normalize-space() != '')。

计算结果节点集(在您的情况下返回4)。

答案 1 :(得分:3)

*[not(*)]用于没有子元素的元素。

编辑:计算它们只需使用count(elements)

答案 2 :(得分:2)

尝试: -

 <xsl:variable name="numOfLeafNodes" select="count(//*[not(*)])" />

这将告诉您在被转换的整个xml中找到了多少个叶节点。使用: -

 <xsl:variable name="numOfLeafNodes" select="count(.//*[not(*)])" />

查找当前上下文节点后代的叶节点数。