var_dump для распечатки DOMNodeList неожиданный результат

У меня есть 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() но подробностей я не хочу.

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"]=> 
    ...
Другие вопросы по тегам