【问题标题】:var_dump for DOMNodeList printout unexpected result用于 DOMNodeList 打印输出意外结果的 var_dump
【发布时间】:2014-11-05 20:44:19
【问题描述】:

我有一个 xml 文件,我将其加载如下:

//$file the file system path of the xml file
function getTopicsList($file){
        $doc = new DOMDocument();
        $doc->load( $file );
        var_dump($doc->getElementsByTagName('topic'));
        return $doc->getElementsByTagName('topic');
    }

加载的xml文件内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<topics>
    <topic>
        <title>Title1</title>
        <keywords>"Some Keys"</keywords>
    </topic>
    <topic>
        <title>The Title</title>
        <keywords>Another Key</keywords>
    </topic>
    <topic>
        <title>A Title</title>
        <keywords>Key two</keywords>
    </topic>
</topics>

上面代码中的var_dump()只是打印出有限的信息如:

object(DOMNodeList)#30 (1) {
  ["length"]=>
  int(3)
}

我希望它至少应该打印该对象的属性,即 xml 标记及其值。我尝试使用其他功能,例如print_r()var_export(),但没有我想要的细节。

【问题讨论】:

    标签: php xml var-dump


    【解决方案1】:

    不,这是节点列表。您可以使用foreach 对其进行迭代,或者使用item() 方法访问节点。

    节点列表用在不同的地方,getElementsByTagName() 是一个,另一个是$childNodes 属性。 Xpath 表达式也返回节点列表。

    请注意,节点不仅可以是元素,还可以是多种节点类型。像文本、cdata 部分或属性。

    您可以使用 var_dump() 转储单个节点。这适用于 PHP >= 5.3.11 或 >= 5.4.1。

    $dom = new DOMDocument();
    $dom->loadXML('<foo/>'); 
    var_dump($dom->documentElement);
    

    输出:

    object(DOMElement)#2 (18) { 
      ["schemaTypeInfo"]=> 
      NULL 
      ["tagName"]=> 
      string(3) "foo" 
      ["textContent"]=> 
      string(0) "" 
      ["baseURI"]=> 
      string(1) "/" 
      ["localName"]=> 
      string(3) "foo" 
      ["prefix"]=> 
      string(0) "" 
      ["ownerDocument"]=> 
        ...
    

    【讨论】:

      猜你喜欢
      • 2013-12-20
      • 2016-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-05
      • 1970-01-01
      • 2016-10-11
      • 1970-01-01
      相关资源
      最近更新 更多