我正在使用此Xpath查询
//li[contains(@class, 'cmil_header')]/span[contains(@class, 'cmil_theatre')]
,此查询的结果是:
Park
Saga Tokey
Latvia
Latvia
Skande
Paramount
Paramount
Paramount
Oslo
Oslo
...
我一直在搜索,我得出的结论是,可以选择使用Xpath选择唯一或不同的nodevalues / items。但我无法让它发挥作用。
我已经管理好能够选择//li[contains(@class, 'cmil_header')][1]/span[contains(@class, 'cmil_theatre')]
的特定项目(在这种情况下为Park),我认为//li[contains(@class, 'cmil_header')][distinct-values()]/span[contains(@class, 'cmil_theatre')]
可行,但不是。
我的问题: 我的查询将如何重现:
Park
Saga Tokey
Latvia
Skande
Paramount
Oslo
...
编辑:带样本的pastabin http://pastebin.com/a3x7hRFu
答案 0 :(得分:1)
XPath 1.0解决方案(没有distinct-values
函数)依赖于重复的顺序:
//li[contains(@class, 'cmil_header')]/span[contains(@class, 'cmil_theatre') and (not(../preceding-sibling::li[contains(@class, 'cmil_header')]) or ../preceding-sibling::li[contains(@class, 'cmil_header')][1]/span[contains(@class, 'cmil_theatre')]/text() != ./text())]
li
类的所有cmil_header
个节点://li[contains(@class, 'cmil_header')]
span
类的子cmil_theatre
个节点:/span[contains(@class, 'cmil_theatre') and
li
类的前cmil_header
个节点:(not(../preceding-sibling::li[contains(@class, 'cmil_header')])
li
类的上一个cmil_header
节点的span
节点子节点包含cmil_theatre
类:{{1} }
or ../preceding-sibling::li[contains(@class, 'cmil_header')][1]/span[contains(@class, 'cmil_theatre')]
的文字内容与...的文字内容不同:span
/text() !=
:span
答案 1 :(得分:-1)
我想// li [包含(@class,' cmil_header')] [distinct-values()] / span [包含(@class,' cmil_theatre')]会工作,但不是。
不,这是行不通的。我发现很难知道你在想什么。最基本的错误是distinct-values()需要一个参数。更巧妙的是,你似乎并不了解谓词(方括号中的表达式)是如何工作的。
假设您的XPath处理器支持XPath 2.0,那将会起作用
distinct-values(//li[contains(@class, 'cmil_header')]/
span[contains(@class, 'cmil_theatre')])