spirik
@spirik
Инженер по ремонту компьютерной техники

Как распарсить xml (в php)?

Работаю с неким АПИ
На мой запрос АПИ отвечает в формате xml
Обычно ответ приходит примерно таким:
<?xml version="1.0" ?>
<root numrecords="3">
  <node1 index="0" result="0" saleid="98556" ticketbarcode="39040056074800160611" />
  <node2 index="1" result="0" saleid="98557" ticketbarcode="22040058074800160611" />
  <node3 index="2" result="0" saleid="98558" ticketbarcode="10040060074800160611" />
</root>

Тут проблем не возникает, я поступаю примерно так:
// $result - сюда приходит ответ в виде xml
  $dom = new DomDocument();
  $dom->loadXML($result);
  $root = $dom->documentElement;
  $nodes = $root->childNodes;
  foreach($nodes as $node) {
     echo $node->getAttribute("ticketbarcode");
  }


Но иногда (на самом деле часто) чтото идёт не так и я получаю xml в другом формате:
<?xml version="1.0" ?>
<root numrecords="3">
  <node1 index="0" result="0" saleid="98556" ticketbarcode="39040056074800160611">
    <node2 index="1" result="0" saleid="98557" ticketbarcode="22040058074800160611">
      <node3 index="2" result="0" saleid="98558" ticketbarcode="10040060074800160611">
      </node3>
    </node2>
  </node1>
</root>


и всё ломается...

С разработчиками АПИ спорить бесполезно....

Может кто знает - как получить все дочерние элементы не зависимо от степени их вложенности?
  • Вопрос задан
  • 1150 просмотров
Решения вопроса 1
@bears
Попробуйте вместо:
$nodes = $root->childNodes;
вот это:
$nodes = $root->getElementsByTagName('*');
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы