У меня есть 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