我如何搜索出现在另一个下的DOMElement
一个?id
DOMElement
$element->ownerDocument->getElementById('my-id');
...将搜索整个文档。我只希望元素出现在$element
.
使用XPath非常简单:
$xpath = new DomXpath($element->ownerDocument);
$subelement = $xpath->query('descendant::*[@id="my-id"]', $element);
$element
基本上,它会在上下文节点(此处)下方的树中的任何位置查找id
属性等于my-id
...
您可以使用 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 中,它会自动到 context-node,在 DOMXPath 中你需要指定它。
哦,刚刚看到,是你在那个答案中编辑了 xpath,所以重要的部分是当绑定到上下文节点时,使用
.
双斜杠之前的点//
作为斜杠,否则会再次进入根目录,点可以防止这种情况(与在文件系统中指定相对文件路径相比)。