XPath同级返回空

XPath同级返回空,xpath,domdocument,Xpath,Domdocument,我使用的是XPath测试仪,它返回的正是我想要的。出于某种原因,它会删除我的完整查询,但如果您使用它,它会工作 */h3[contains(string(),“Description”)]/以下同级::p[1] 但在现实生活中,我从变量中什么也得不到 我试图在描述之后获取数据,在本例中是一段 HTML $feed_项目= <div class="outer-feed"><ul> <li><strong>Severity:</strong>

我使用的是XPath测试仪,它返回的正是我想要的。出于某种原因,它会删除我的完整查询,但如果您使用它,它会工作

*/h3[contains(string(),“Description”)]/以下同级::p[1]

但在现实生活中,我从变量中什么也得不到

我试图在
描述
之后获取数据,在本例中是一段

HTML $feed_项目=

<div class="outer-feed"><ul>
<li><strong>Severity:</strong> <span class="label label-info">Low</span></li>
</ul>
<h3>Description</h3>
<p>The lack of validation of configuration parameters used in SQL queries caused various SQL injection vectors.</p>
...
变量转储

object(DOMNodeList)#1654 (1) { ["length"]=> int(0) }
以及错误

Notice
: Trying to get property 'textContent' of non-object in
让我困惑的是,我可以通过使用以下内容从同一个HTML获取严重性:

$severity_node = $xpath->query('*/li[contains(string(), "Severity:")]', $feed_item);
$severity = preg_replace('/Severity:\W*/u', '', $severity_node->item(0)->textContent);
我的第一个想法是缩小到H3并输出它

$description_node = $xpath->query('*/h3[contains(string(), "Description")]', $feed_item);
object(DOMNodeList)#1654 (1) { ["length"]=> int(0) } // doesn't contain anything
考虑到以下各项相同,但第一项有效,第二项无效,那么会出现什么问题

$severity_node = $xpath->query('*/li[contains(string(), "Severity:")]', $feed_item);
$description_node = $xpath->query('*/h3[contains(string(), "Description")]', $feed_item);

为什么一个有效而另一个无效。解决这类问题的最佳方法是什么。它似乎在xpathtester上工作。在PHP中,有什么错误会导致此问题?

仅当调用的上下文项是
h3
元素的祖辈时,启动
*/h3[…]
的查询才会起作用。您没有提供有关上下文项的任何信息,因此我怀疑这是不同的

你会问这样一个问题:“为什么一个有效而另一个无效。解决类似问题的最佳方法是什么。它似乎在xpathtester上有效。我可能做错了什么导致PHP出现此问题?”


首先要了解XPath表达式可能依赖于上下文项,使用不同上下文项计算的同一表达式将给出不同的结果。一旦您理解了这个概念,它有望变得更加清晰。

只有在调用上下文项时,上下文项是
h3
元素的祖辈时,以
*/h3[…]
开头的查询才会起作用。您没有提供有关上下文项的任何信息,因此我怀疑这是不同的

你会问这样一个问题:“为什么一个有效而另一个无效。解决类似问题的最佳方法是什么。它似乎在xpathtester上有效。我可能做错了什么导致PHP出现此问题?”

首先要了解XPath表达式可能依赖于上下文项,使用不同上下文项计算的同一表达式将给出不同的结果。一旦您理解了这个概念,希望它会变得更加清晰。

尝试使用以下XPath:

//h3[text()="Description"]/following::p[1]
尝试使用以下XPath:

//h3[text()="Description"]/following::p[1]

原谅我的无知。HTML不是上下文项吗?或者是描述后面的
?我不是100%确定您使用的是什么XPath API,但我认为上下文项可能是
$feed\u item
中的任何内容,并且您没有向我们显示该变量包含的内容。啊,对不起,是的,HTML是
$feed\u item
,我将更新我的问题。我正在使用PHP
DOMDocument
请原谅我的无知。HTML不是上下文项吗?或者是描述后面的
?我不是100%确定您使用的是什么XPath API,但我认为上下文项可能是
$feed\u item
中的任何内容,并且您没有向我们显示该变量包含的内容。啊,对不起,是的,HTML是
$feed\u item
,我将更新我的问题。我正在使用PHP
DOMDocument