Php QueryPath选择器失败,链接为:has():contains()

Php QueryPath选择器失败,链接为:has():contains(),php,jquery-selectors,css-selectors,querypath,Php,Jquery Selectors,Css Selectors,Querypath,以下CSS选择器在jQuery中工作,因此我希望它在QueryPath 3.0.0中工作,但它只返回空值: div#caption:has(h2):contains('Product Description') div:first 以下是我试图让它检索的内容: <div id="caption"><h2>Product Description</h2><div>Text I want to capture is here.</div>

以下CSS选择器在jQuery中工作,因此我希望它在QueryPath 3.0.0中工作,但它只返回空值:

div#caption:has(h2):contains('Product Description') div:first
以下是我试图让它检索的内容:

<div id="caption"><h2>Product Description</h2><div>Text I want to capture is here.</div><div>I don't want this text.</div><br clear="all" /></div>
我要捕获的产品描述文本在这里。我不需要此文本。

选择器有什么问题?

找到了原因

:contains()
将括号视为字符串分隔符,因此不需要在字符串周围加引号

如果将字符串用引号括起来,QueryPath将查找引号

例如,
:contains('Subject')
仅与pcdata
'Subject'
匹配

只需去掉单引号,然后像
:contains(产品描述)
那样操作即可


来源:

这不是有效的CSS选择器<代码>:has()
:contains()
:first
都是特定于jQuery的。这可能取决于QueryPath是使用jQuery选择器还是CSS选择器。@BoltClock:has(),:contains()和:首先,在大多数情况下,所有这些都在QueryPath中工作。我不知道他们为什么不在这个案子里。哇,真奇怪。我本来希望它可以使用引号或不使用引号,因为在从规范中删除时,-根据当时的定义,这里的解决方案实际上是无效的。我猜当您尝试实现一个从未完全标准化的选择器时,就会发生这种情况。我只是希望它至少遵循jQuery约定,允许引号作为可选的。QueryPath在他们的网站出现某种故障后一直保持沉默,所以不知道何时会对此进行错误修复。