2011-11-04 32 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:不客氣。 –