[英]Xpath: How to combine these two child node to get parent node?
我是 XPath 的新手并且很困惑。 任何人都可以快速浏览一下,看看我的语法有什么问题?
我正在尝试 select 的所有id="list-overview"
的直接子div's
,其中在树的某处有两个子节点,其中包含data-price<=20
和a 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.