0

我如何搜索出现在另一个下的DOMElement一个?idDOMElement

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

...将搜索整个文档。我只希望元素出现在$element.

4

2 回答 2

4

使用XPath非常简单:

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

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

于 2013-06-26T19:05:16.850 回答
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 中,它会自动到 context-node,在 DOMXPath 中你需要指定它。

哦,刚刚看到,是你在那个答案中编辑了 xpath,所以重要的部分是当绑定到上下文节点时,使用.双斜杠之前的点//作为斜杠,否则会再次进入根目录,点可以防止这种情况(与在文件系统中指定相对文件路径相比)。

另见:php - xpath 问题中的上下文节点

于 2013-06-26T23:11:40.743 回答