Как узнать, является ли DOMElement/DOMNode подузлом DOMDocument в PHP?

У меня есть DOMElement. Как узнать, является ли он подузлом DOMDocument?

Предыстория вопроса:

[Объект DOMElement] доступен только для чтения. Он может быть добавлен к документу, но дополнительные узлы не могут быть добавлены к этому узлу, пока узел не будет связан с документом. (см. здесь).


РЕДАКТИРОВАТЬ:

DOMNode#getNodePath() получает путь расположения XPath для узла. Корневой узел имеет путь /. Следовательно, узел является подэлементом, если его расположение не равно /.

Но это работает только для подузлов. Если это «независимый» объект узла, выдается предупреждение:

$test = new \DOMNode();
echo $test->getNodePath();

Предупреждение: DOMNode::getNodePath(): не удалось получить DOMNode в /path/too/foo.php в строке 16.


person automatix    schedule 29.07.2013    source источник


Ответы (2)


Вы должны проверить свойство ownerDocument:

if ($node->ownerDocument === $document) {
    // $node is part of $document
} else {
    $importedNode = $document->importNode($node, true);
    // now you can append the node wherever you choose in the document
}
person cmbuckley    schedule 10.03.2014

Проверьте тип класса:

if($dom instanceof \DOMDocument) { ... }
person Xeoncross    schedule 10.03.2014