【问题标题】:Select distinct child elements from repeating parent using XPath使用 XPath 从重复父元素中选择不同的子元素
【发布时间】:2013-06-12 15:39:24
【问题描述】:

我想使用 XPath 1.0 从重复父元素中选择不同的子元素。 以下是 XML:

<parent>
<something>
    <catalog>
        <title>AAA</title>
        <artist>111</artist>
    </catalog>
    <catalog>
        <title>AAA</title>
        <artist>111</artist>
    </catalog>
    <catalog>
        <title>BBB</title>
        <artist>222</artist>
    </catalog>
</something>
<something>
    <catalog>
        <title>CCC</title>
        <artist>333</artist>
    </catalog>
    <catalog>
        <title>BBB</title>
        <artist>222</artist>
    </catalog>
    <catalog>
        <title>CCC</title>
        <artist>333</artist>
    </catalog>
</something>
<something>
    <catalog>
        <title>AAA</title>
        <artist>111</artist>
    </catalog>
    <catalog>
        <title>BBB</title>
        <artist>222</artist>
    </catalog>
    <catalog>
        <title>CCC</title>
        <artist>333</artist>
    </catalog>
</something>
</parent>

现在,在预期的输出中,我只想在整个 XML 中选择不同的 catalog 元素,以便进一步处理它。所以输出应该是:

<catalog>
    <title>AAA</title>
    <artist>111</artist>
</catalog>
<catalog>
    <title>BBB</title>
    <artist>222</artist>
</catalog>
<catalog>
    <title>CCC</title>
    <artist>333</artist>
</catalog>

我查看了一些现有的解决方案,例如 not(. = ../following-sibling::*),但这对我没有帮助,因为我试图在重复的父项中选择不同的项。请帮助并为令人发指的 xml 表示歉意。

【问题讨论】:

    标签: xml xpath unique


    【解决方案1】:

    使用跟随轴而不是跟随兄弟,它将搜索从当前上下文开始的所有文档:

    //catalog[not(. = following::catalog)]
    

    【讨论】:

    • 太棒了。谢谢,它就像一个魅力。很抱歉这么久才承认。我已经离开了。
    猜你喜欢
    • 2021-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    • 2015-04-03
    相关资源
    最近更新 更多