【问题标题】:Navigating XML via Xpath通过 Xpath 导航 XML
【发布时间】:2016-01-12 20:38:37
【问题描述】:

我是 Xpath 的新手,在处理更复杂的部分之前,我一直在尝试使用 xpath 测试站点了解一些基本示例。

我试图准确了解如何将 contains 函数与其他条件结合使用,但有点困难。

这是我的 xml:

<root xmlns:foo="http://www.foo.org/" xmlns:bar="http://www.bar.org">
    <actors>
        <actor id="1">Christian Bale</actor>
        <actor id="2">Liam Neeson</actor>
        <actor id="3">Michael Caine</actor>
    </actors>
    <foo:singers>
        <foo:singer id="4">Tom Waits</foo:singer>
        <foo:singer id="4">B.B. King</foo:singer>
        <foo:singer id="6">Ray Charles</foo:singer>
    </foo:singers>
</root>

为了复制我试图解析的 xml(或更准确地说是 html)的类型,我重复了其中一个歌手属性。

所以我尝试使用 contains 来查找 foo:singer id = 4 并包含 "Tom Waits"

根据我阅读的内容和看到的示例,您可以使用这种表达方式:

.//*[@id =4 and //foo:singer[contains(text(),'Tom Waits')]]/text()

但是,这将返回 Tom WaitsBB King

如果我分别使用这两个表达式,它们会得到预期的结果,所以不确定它们是否/如何组合。

如果你能帮助我,非常感谢。

安德鲁

【问题讨论】:

    标签: xpath


    【解决方案1】:

    一定要注意上下文。不需要嵌套谓词。

    .//*[@id =4 and contains(.,'Tom Waits')]/text()
    

    所以我尝试使用 contains 来查找 foo:singer id = 4 并包含“Tom Waits”。

    由于您使用 //foo:singer 进行包含测试,因此整个文档都在上下文中,因此它始终为真。

    【讨论】:

      【解决方案2】:

      使用

      //foo:singer[contains(text(),'Tom Waits')]/text()
      

      【讨论】:

        猜你喜欢
        • 2021-03-21
        • 1970-01-01
        • 2017-04-19
        • 1970-01-01
        • 1970-01-01
        • 2012-06-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多