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>

たとえば、hasChildNodes を呼び出すことができるように、「test」の DOMNode を取得したいと考えています。「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

DOMElementDOMNodeを拡張します。

$d->documentElementによってルート DOMElementを取得します。

于 2009-07-30T10:37:09.810 に答える
17

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

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

PHPのドキュメントによると、DOMElementはDOMNodeのサブクラスであるhasChildNodes()ため、 -methodを継承する必要があります。

于 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 に答える