如何在给定元素下按id搜索?

时间:2013-06-26 18:58:27

标签: php dom xpath

如何在另一个DOMElement下显示的id之前搜索DOMElement

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

...将搜索整个文档。我只希望在$element下显示该元素。

2 个答案:

答案 0 :(得分:4)

使用XPath非常简单:

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

基本上,它在上下文节点($element此处)下方的树中的任何位置查找元素,id属性等于my-id ...

答案 1 :(得分:1)

您可以使用XPath执行此操作。以下将具有该元素(典型的少于120个字符的单行):

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

如果找不到,您将获得NULL。这基本上做的是使用@ircmaxell在他的回答中建议的简写形式:

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

context-node是相同的,在simplexml xpath中,它自动到上下文节点,在DOMXPath中你需要指定它。

  

哦,只是看到了,是你在那个答案中编辑了xpath,所以重要的部分是绑定到context-node时,在双斜杠{{1}之前使用点.如斜线否则将再次转到root,点会阻止这种情况(与在文件系统中指定相对文件路径相比)。

     

请参阅:php - context node in xpath problem