无法让后续的Xpath查询生效

时间:2011-11-04 21:38:43

标签: php html dom xpath

我正在尝试跨多个Xpath查询访问多个项目,同时使用第一个查询作为基础。

我试过了:

$playerinfo = $xpath->query('//*[@class="PlayerHeader"]');
$playername = $xpath->query('/h3/a', $playerinfo);
echo $playername->item(0)->nodeValue;

没有返回任何内容。如果我做

$playerinfo = $xpath->query('//*[@class="PlayerHeader"]/h3/a');
echo $playerinfo->item(0)->nodeValue;

工作正常。任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:3)

$playername = $xpath->query('/h3/a', $playerinfo); 

您正在尝试针对节点评估绝对 XPath表达式 - 这没有意义。

始终评估绝对表达式,将文档节点作为上下文节点。

没有/h3节点(顶部元素可能是html,而不是h3,因此,也没有/h3/a节点。

解决方案:使用相对表达式:h3/a

推荐:阅读“相对和绝对XPath表达式”并理解此主题。

答案 1 :(得分:1)

$ playerinfo是匹配节点的列表 - 当您将其用作后续搜索的上下文时,上下文只能是SINGLE节点,而不是节点列表:

$playername = $xpath->query('/h3/a', $playerinfo->item(0));