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


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

Пример:

<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>

Я хочу получить доменный код "тест", чтобы я мог вызывать, например, hasChildNodes. Я могу получить "Элемент документа", но это элемент купола. Может быть, я смогу пойти оттуда?

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

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

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

Author: BlaM, 2009-07-30

4 answers

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

 5
Author: PatrikAkerstrand, 2017-08-27 18:03:35

DOMElement расширяет доменный узел.

Вы получаете корень Элемент DOMElement с помощью элемента $d->documentElement.

 59
Author: Cristian Toma, 2009-07-30 10:37:09

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

$dom=new DomDocument;
$dom->Load("file.xml");
$root=$dom->documentElement; // Root node
 13
Author: adatapost, 2009-07-30 10:34:34

До 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;
}

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

 0
Author: Cliffordlife, 2017-06-30 13:49:30