PHP5: найти корневой узел в DOMDocument

У меня есть PHP5 DOMDocument, и я пытаюсь найти корневой узел (а не корневой элемент).

Пример:

<test> <element> <bla1>x</bla1> <bla2>x</bla2> </element> <element> <bla1>y</bla1> <bla2>y</bla2> </element> <element> <bla1>z</bla1> <bla2>z</bla2> </element> </test> 

Я хочу получить DOMNode «test», чтобы я мог позвонить – например, hasChildNodes. Я могу получить «documentElement», но это DOMElement. Может быть, я могу идти оттуда?

 $d = DOMDocument::loadXML($xml); // [... do some stuff here to find document's root node ...] if ($rootnode->hasChildNodes()) echo 'yayy!' 

Кто может заполнить пробел? Кажется, я слепой.

(Очевидно, что это не только hasChildNodes, которые я хочу вызвать – так что НЕТ, это не помогает найти другой метод, чтобы узнать, содержит ли документ материал. Это просто для моего простого примера. Мне нужен DOMNode в конце.)

Согласно документам PHP DOMElement является подклассом DOMNode , поэтому он должен наследовать метод hasChildNodes() .

DOMElement расширяет DOMNode .

Вы получаете Root DOMElement $ d-> documentElement.

DOM Model – W3C разбил DOM на древовидную структуру узлов разных типов. Интерфейс узла – это базовый интерфейс для всех элементов. Все объекты, реализующие этот интерфейс, выставляют методы для работы с детьми.

 $dom=new DomDocument; $dom->Load("file.xml"); $root=$dom->documentElement; // Root node 

До php 5.1.3 этот парень облизал

https://macfoo.wordpress.com/2009/06/03/getting-the-root-node-from-an-xml-string

 /** * function getXMLRootNode * @param string An xml string * @return string Return XML root node name */ function getXMLRootNode($xmlstr) { // Create DOM model $doc = new DOMDocument(); // Load the XML string if(!$doc->loadXML($xmlstr)) { throw new Exception('Unable to parse XML string'); } // Find the root tag name $root = $doc->documentElement; if(!isset($root)) { throw new Exception('Unable to find XML root node'); } if(!isset($root->nodeName)) { throw new Exception('Unable to find XML root node name'); } return $root->nodeName; } 

Перекрестный текст Ответы на вопросы, которые я ударил, пытаясь найти, как это сделать. 5.1.3

  • Получить корневой узел XML-документа с помощью simplexml
  • PHP5: найти корневой узел в DOMDocument