【问题标题】:Trouble getting subsequent Xpath queries to work无法使后续 Xpath 查询正常工作
【发布时间】:2011-12-22 09:30:07
【问题描述】:

我正在尝试跨多个 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;

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

【问题讨论】:

    标签: php html dom xpath


    【解决方案1】:
    $playername = $xpath->query('/h3/a', $playerinfo); 
    

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

    绝对表达式总是以文档节点作为上下文节点进行计算。

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

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

    建议:阅读“相对和绝对 XPath 表达式”并理解这个主题。

    【讨论】:

    • 感谢指点,对我帮助很大。对于其他查看此内容的人,正确的代码是 $playername = $xpath->query('./h3/a', $playerinfo->item(0));因为我没有在 foreach 中使用它,只想访问单个节点。
    【解决方案2】:

    $playerinfo 是一个匹配节点的列表——当你将它用作后续搜索的上下文时,上下文只能是一个 SINGLE 节点,而不是一个节点列表:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-09
      • 2013-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多