2013-06-26 54 views
0

如何通過id搜索DOMElement,出現在另一個DOMElement下?如何在給定元素下通過id進行搜索?

$element->ownerDocument->getElementById('my-id'); 

...將搜索整個文檔。如果它出現在$element下,我只想要返回該元素。

+0

是XPath的一個選擇? –

+0

@RolandoIsidoro它是! – Benjamin

+0

@Benjamin FYI有[** phpQuery **](http://code.google.com/p/phpquery),不知道該用戶是否知道它... – HamZa

回答

4

很簡單的用XPath

$xpath = new DomXpath($element->ownerDocument); 
$subelement = $xpath->query('descendant::*[@id="my-id"]', $element); 

基本上,它尋找的元素在上下文節點($element這裏)與id屬性等於my-id下樹的任何地方......

+1

實際上,在XPath表達式中存在語法錯誤,並且它返回'$ element'外部的元素。我冒昧地更新您的答案,現在可以使用適合我的代碼! – Benjamin

1

你可以使用XPath來完成。下面將有該元素(典型小於120個字符的一行):

$idElement = ($r = simplexml_import_dom($element)->xpath('.//*[@id="my-id"]')) 
      ? dom_import_simplexml($r[0]) : NULL; 

如果它沒有找到,你會得到NULL

descendant::*[@id="my-id"] 
.//*[@id="my-id"] 

上下文節點是一樣的,SimpleXML中的XPath,它會自動對上下文節點,在DOMXPath您需要:這是什麼基本上沒有使用短手形式是什麼@ircmaxell在他的回答表明是指定它。

哦,只要看到,它是你誰編輯在回答XPath的,所以重要的一部分時,必然是對上下文節點,雙斜槓前使用圓點.//的斜槓,否則將去到根再次,點防止這(比較與指定文件系統中的相對文件路徑)。

看得那麼清楚:php - context node in xpath problem