繁体   English   中英

Xpath:如何结合这两个子节点得到父节点?

[英]Xpath: How to combine these two child node to get parent node?

我是 XPath 的新手并且很困惑。 任何人都可以快速浏览一下,看看我的语法有什么问题?

我正在尝试 select 的所有id="list-overview"的直接子div's ,其中在树的某处有两个子节点,其中包含data-price<=20a div containing "Orange" text

let xy = $x(`//*[@id="list-overview"]/div[./div/a/div/div/div[@data-price<=20]][./div/a/div/div[@class='fruit'][contains(.,'Orange')]])`)

打破它。 我已经分别测试了这两个并且它们有效。

`//*[@id="list-overview"]/div[./div/a/div/div/div[@data-price<=20]]`
`//*[@id="list-overview"]/div[./div/a/div/div[@class='fruit'][contains(.,'Orange')])]`

我似乎无法以某种方式将它们结合起来,并且不确定我做错了什么?

编辑:

尝试了建议,以下 xpath 不再抛出异常。 但是当有匹配 price < 20 和 fruit="Orange" 的元素时,它返回空数组

$x(`//*[@id="list-overview"]/div[./div/a/div/div/div[@data-price<=20] and ./div/div/a/div/div[@class='fruit'][contains(.,'Orange')]]`)

如果我理解您的想法,那么您将缺少这两个条件之间的逻辑and 我相应地更正了 XPath 表达式。 请试试这个:

let xy = $x(`//*[@id="list-overview"]/div[./div/a/div/div/div[@data-price<=20] and ./div/a/div/div[@class='fruit'][contains(.,'Orange')]])`)

UPD
请试试这个:

let xy = $x(`//*[@id="list-overview"]/div[.//div[@data-price<=20] and .//div[@class='fruit'][contains(.,'Orange')]])`)

而不是这个

$x(//*[@id="list-overview"]/div[./div/a/div/div/div[@data-price<=20]][./div/a/div/div[@class='fruit'][contains(.,'Orange')]]))

你可以这样做把它们结合起来,

把两个孩子紧紧地结合在一起

$x(//*[@id="list-overview"]/div[./descendant::div[@data-price<=20]] and [./div/a/div/div[@class='fruit'][contains(.,'Orange')]])

或者要么拥有其中一个,但您仍然希望继续进行。

$x(//*[@id="list-overview"]/div[./descendant::div[@data-price<=20]] or [./div/a/div/div[@class='fruit'][contains(.,'Orange')]])

此外,我还包含了descendant以使其更具可读性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM