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"]=>
...