【问题标题】:Select just repeating nodes name选择只是重复的节点名称
【发布时间】:2017-11-06 22:51:58
【问题描述】:

考虑到你有以下 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

【问题讨论】:

  • 有没有尝试自己解决问题?

标签: xml xslt xpath


【解决方案1】:

查找之前有同名兄弟的节点

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

为了避免输出中的重复,您可以添加一个条件,即没有这样的后续兄弟

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

【讨论】:

    【解决方案2】:

    你可以试试

        <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>
    

    【讨论】:

    • 这不是问题,因为它带来了以下内容
    • A 1 A 2 B 3 A 5 b 8 b 8,但我想要的只是可重复的标签名称
    • 拜托,如果有人可以帮忙
    • @AntonioGoncalves 回答已更新
    猜你喜欢
    • 1970-01-01
    • 2018-02-16
    • 2018-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多