Вот пример кода, который, я надеюсь, может указать вам правильное направление. По существу, это , идущий по DOMDocument
, повторяющий имя и значения элемента. Обратите внимание, что пробелы между элементами значительны, поэтому для демонстрации XML сжат. Вы можете обнаружить похожую проблему при загрузке из файла, поэтому, если вы не получаете ожидаемый результат, вам может понадобиться удалить пробельные узлы.
Вы можете заменить //root/*
другим XPath , например //people
, если вы хотите использовать только элементы <people>
.
<?php
$xml = <<<XML
<root><start_info><info tabindex="1"><infonumber>1</infonumber><trees>green</trees></info></start_info>
<people><pe><people_ages><range number="1"><age value="1">1</age><age value="2">2</age></range></people_ages></pe></people>
</root>
XML;
$dom = new DOMDocument();
$dom->recover = true;
$dom->loadXML($xml);
$xpath = new DOMXPath($dom);
$nodelist = $xpath->query('//root/*');
foreach ($nodelist as $node) {
echo "\n$node->tagName";
getData($node);
}
function getData($node) {
foreach ($node->childNodes as $child) {
if ($child->nodeType == XML_ELEMENT_NODE) {
echo ($child->tagName === '' ? '' : "\n").$child->tagName;
}
if ($child->nodeType == XML_TEXT_NODE) {
echo '->'.$child->nodeValue;
}
if ($child->hasChildNodes()) {
getData($child); // recursive call
}
}
}
?>