我是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 Waits
和BB King
。
如果我分别使用这两个表达式,它们会得到预期的结果,因此不确定它们是否/如何组合。
非常感谢你能帮助我。
安德鲁
答案 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()