代码之家  ›  专栏  ›  技术社区  ›  Marcelo Cantos

PHP5:在DOMDocument中查找根节点

  •  12
  • Marcelo Cantos  · 技术社区  · 15 年前

    <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>
    

    我想得到“test”的DOMNode,这样我就可以调用——例如——hasChildNodes。我可以得到“documentElement”,但那是一个DomeElement。也许我可以从那里开始?

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

    (显然,我想调用的不仅仅是hasChildNodes——因此,不,找到另一个方法来确定文档是否包含内容是没有帮助的。这只是我的简单示例。我需要一个DOMNode作为结尾。)

    4 回复  |  直到 15 年前
        1
  •  65
  •   Cristian Toma    15 年前

    延伸 多姆诺德 .

    多梅莱恩 增加$d->文档元素。

        2
  •  17
  •   KV Prajapati    15 年前

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

    $dom=new DomDocument;
    $dom->Load("file.xml");
    $root=$dom->documentElement; // Root node
    
        3
  •  5
  •   Alexis Wilke    7 年前

    根据PHP文档 DOMElement is a subclass of DOMNode ,因此它应该继承 hasChildNodes()

        4
  •  0
  •   Cliffordlife    7 年前

    在PHP5.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之前的版本中,我试图找出如何解决这些问题时遇到的问题

    推荐文章