Привет Я пытаюсь использовать XML-Reader для чтения динамического xml, где я не знаю имена элементов. Мне нужно использовать XML Reader, а не SimpleXML, поскольку это все, что доступно на моем сервере. Проблема, с которой я столкнулась, заключается в попытке иметь что-то, что может иметь дело с вложенными и не вложенными элементами. Мой XML выглядитPHP XMLREADER Вложенные элементы
<status>
<state>active</state>
<time>2014-07-15T04:00:00.000Z</time>
<output-type>archive</output-type>
<sources>
<source>
<class>audio</class>
<channels>
<channel>
<position>left</position>
<average>0</average>
<peak>0</peak>
</channel>
<channel>
<position>right</position>
<average>1095</average>
<peak>1114</peak>
</channel>
</channels>
</source>
</status>
но также может выглядеть следующим образом:
<status>inactive</status>
Я использую следующий код:
while ($reader->read()) {
if ($reader->nodeType == XMLReader::ELEMENT) {
$element = $reader->name;
//$elementarray[] = $element;
echo $element;
if ($reader->depth <1){echo"</br>";}
}
if ($reader->nodeType == XMLReader::TEXT) {
$value = $reader->value;
$valuearray[] = $value;
echo " : ".$value."</br>";
}
}
Это выводит
1stElement2ndelement : text
я не могу найти anyw ay в плохо документированном XML Reader, чтобы иметь выход
1stElement:
2ndelement: text
, который я могу заполнить массивом.
Любая помощь приветствуется, поскольку я новичок в PHP.
Спасибо, у меня не было рассматриваться DOM, но это гораздо проще. Я обновил xml, как было предложено. У меня возникают проблемы с дублирующими узлами, такими как «канал», любое предложение будет оценено по достоинству. – Kirby
Вам нужно повторить их, как я сделал в примере с вариантами children. Проверьте второй аргумент метода(), это контекст. Вы можете использовать его для выражения выражения относительно узла. Я добавлю пример ответа. – ThW