我有一个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。 )
答案 0 :(得分:61)
DOMElement 扩展 DOMNode 。
您可以通过$ d-&gt; documentElement获得 Root DOMElement 。
答案 1 :(得分:15)
DOM模型 - W3C已将DOM分解为不同类型节点的树结构。 Node接口是所有元素的基础接口。实现此接口的所有对象都公开了处理子进程的方法。
$dom=new DomDocument;
$dom->Load("file.xml");
$root=$dom->documentElement; // Root node
答案 2 :(得分:5)
根据PHP文档DOMElement is a subclass of DOMNode,它应该继承hasChildNodes()
- 方法。
答案 3 :(得分: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;
}
Cross发布到SO我试图找到如何在5.1.3之前执行此操作时遇到的问题