通过Xpath导航XML

时间:2016-01-12 04:09:05

标签: xpath

我是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)我试图解析,我有一个歌手属性重复。

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

从我所看到的和我见过的例子中,你可以使用这种表达方式:

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

但是,这会同时返回Tom WaitsBB King

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

非常感谢你能帮助我。

安德鲁

2 个答案:

答案 0 :(得分:1)

务必注意背景。不需要嵌套谓词。

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

所以我试图用contains来找到foo:歌手id = 4并包含&#34; Tom Waits&#34;。

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

答案 1 :(得分:0)

使用

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