2011-11-04 96 views
1

我试图在使用第一个查询作为基础的情况下跨多个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; 

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

回答

1

$ playerinfo是匹配的节点列表 - 当你用它作为后续搜索的环境,背景只能是单个节点,而不是一个节点列表:

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

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

绝对表达式总是以文档节点为上下文节点进行评估。

没有/h3节点(顶部元件可能是html,不h3,并且由于此,没有/h3/a节点也)。

:使用相对表达:h3/a

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

+0

感谢您的指点,帮了我很多。只为其他人查看,正确的代码是 $ playername = $ xpath-> query('./ h3/a',$ playerinfo-> item(0)); 因为我没有在foreach中使用它,只想访问单个节点。 – relm

+0

@xsphere:不客气。 –