如何在另一个DOMElement
下显示的id
之前搜索DOMElement
?
$element->ownerDocument->getElementById('my-id');
...将搜索整个文档。我只希望在$element
下显示该元素。
答案 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,点会阻止这种情况(与在文件系统中指定相对文件路径相比)。