15

我有一个 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,以便我可以调用 - 例如 - hasChildNodes。我可以得到“documentElement”,但那是一个 DOMElement。也许我可以从那里去?

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

谁能填补空白?我好像瞎了

(显然,我想调用的不仅是 hasChildNodes - 所以不,寻找另一种方法来确定文档是否包含内容并没有帮助。这只是我的简单示例。我最后需要一个 DOMNode。)

4

4 回答 4

66

DOMElement扩展了 DOMNode

您通过 $d->documentElement获得Root DOMElement 。

于 2009-07-30T10:37:09.810 回答
17

DOM 模型- W3C 已将 DOM 分解为不同类型节点的树形结构。Node 接口是所有元素的基本接口。实现此接口的所有对象都公开了处理子级的方法。

$dom=new DomDocument;
$dom->Load("file.xml");
$root=$dom->documentElement; // Root node
于 2009-07-30T10:34:34.277 回答
5

根据 PHP 文档DOMElement 是 DOMNode 的子类,所以它应该继承hasChildNodes()- 方法。

于 2009-07-30T10:35:34.743 回答
0

在 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 之前执行此操作时遇到的问题

于 2017-06-30T13:49:30.270 回答