2009-07-30 10 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だけではありませんので、文書に内容が含まれているかどうかを調べる別の方法を見つけるのに役立ちません。 )

+0

問題は、PHP5とPHP4の間の "DOMDocument"と "DomDocument"との間の完全な混乱とその奇妙なドキュメントのようです。私は今それが修正されていると思う。みんなありがとう。 – BlaM

答えて

5

PHPのドキュメントDOMElement is a subclass of DOMNodeによると、それは、hasChildNodes() -methodを継承する必要があります。

+0

Hmmm、それは実際には本当です...そして、もし私が - > documentElementを関数に送らなければ、すべてが正しく動作するように思われます...関数呼び出しは、それが何かを失います。 ... – BlaM

12

DOMモデル - W3CはDOMをさまざまな種類のノードのツリー構造に分解しました。 Nodeインタフェースは、すべての要素の基本インタフェースです。このインタフェースを実装するすべてのオブジェクトは、子を扱うためのメソッドを公開します。

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

解決策としてマークする必要があります。 – kaiser

55

DOMElementDOMNode

ルートDOMElementは、$ d-> documentElementになります。

+12

これは実際には刻々とした答えです! –

+2

ここにこのプロパティのドキュメントがありますhttp://www.php.net/manual/en/class.domdocument.php#domdocument.props.documentelement – gawpertron

+0

私は誰かをクリックして保存します。上記のドキュメントには、「これは、ドキュメントのドキュメント要素である子ノードに直接アクセスできる便利な属性です。 – Ben

0

この男は、それは十字架がこの前5.1.3

を行う方法を見つけようとしている間、私はヒットSOの質問に投稿されました

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をPHP前