使用XSLT计算XML节点但排除某些节点

时间:2010-07-12 19:17:29

标签: xml xslt

我有以下XML:

<assessment>
    <section>
        <item name="Item1"/>
        <item name="Item2"/>
        <item name="Item3">
            <attributes>
                <item_references>
                    <item_reference>
                        <attributes>
                            <item name="Item3.1">
                                <item name="Item3.1.1"/>
                            </item>
                        </attributes>
                    </item_reference>
                </item_references>
            </attributes>
        </item>
    </section>
</assessment>

使用XSLT,我想计算项目数,但不计算嵌套在项目中的项目。在这种情况下,我想计算Item1,Item2和Item3,但不计算Item3.1或Item3.1.1。所以,在这种情况下,答案应该是3(而不是5)。

我有以下代码来计算项目,但不会遗漏嵌套项目:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
    <xsl:template match="assessment">
        <xsl:value-of select="count(.//item)"/>
    </xsl:template>
</xsl:stylesheet>

如何修改此代码以排除嵌套项?

2 个答案:

答案 0 :(得分:2)

试试这个。

计数(.//项[否(祖先::项)])

答案 1 :(得分:0)

按照样式表,这个

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="text"/>
    <xsl:template match="assessment">
        <xsl:value-of select="count(*/item)"/>
    </xsl:template>
</xsl:stylesheet>

结果:

3

注意:您还可以匹配section元素。尽可能避免使用后代轴。