2009-07-30 89 views
11

我有一個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,這樣我可以稱之爲 - 例如 - 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

好的,問題似乎是PHP5和PHP4之間的「DOMDocument」和「DomDocument」以及它的奇怪文檔之間的混淆。我想我現在已經修好了。謝謝大家。 – BlaM 2009-07-30 10:45:35

回答

5

按照PHP文檔DOMElement is a subclass of DOMNode,所以它應該繼承hasChildNodes() - 方法。

+0

嗯,好的,這其實是真的...如果我不把我的 - > documentElement發送給一個函數,一切似乎都能正常工作......函數調用失去了一些東西......現在, ... – BlaM 2009-07-30 10:38:39

12

DOM模型 - W3C已經將DOM分解成不同類型的節點的樹結構。 Node接口是所有元素的基本接口。所有實現這個接口的對象都暴露了處理子對象的方法。

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

應標記爲解決方案。 – kaiser 2013-11-19 14:24:29

55

DOMElement extends DOMNode

你得到DOMElement由$ d-> documentElement。

+12

這實際上應該是答案! – 2011-08-30 08:45:10

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