选择仅重复节点名称

时间:2017-11-06 22:51:58

标签: xml xslt xpath

考虑到你有以下xml内容,所以我需要xpath表达式只返回重复自身的节点

<A1>
    <NAME>A</NAME>
    <QTY>1</QTY>
</A1>
<A1>
    <NAME>A</NAME>
    <QTY>2</QTY>
</A1>
<A2>
    <NAME>B</NAME>
    <QTY>3</QTY>
</A2>
<A1>
    <NAME>A</NAME>
    <QTY>5</QTY>
</A1>
<A2>
    <NAME>b</NAME>
    <QTY>8</QTY>
</A2>
<A3>
    <NAME>b</NAME>
    <QTY>8</QTY>
</A3>

disire输出是这样的: A1 A2

2 个答案:

答案 0 :(得分:0)

你可以尝试

    <xsl:for-each select="*">
        <xsl:variable name="name" select="name()"/>
        <xsl:if
            test="count(preceding-sibling::*[name() = $name]) = 0 and count(following-sibling::*[name() = $name]) != 0">
            <xsl:value-of select="name()"/>
            <xsl:text> </xsl:text>
        </xsl:if>
    </xsl:for-each>

答案 1 :(得分:0)

查找节点,使得前面的兄弟姐妹具有相同的名称

columns_names_used = ['example3', 'example5']

为了避免输出中的dublicates你可以添加一个条件,在兄弟之后不是这样的

//*[name() = preceding-sibling::*/name()]