PHP XMLReader родитель и потомок с тем же именем - PullRequest
0 голосов
/ 30 июня 2018

У меня много проблем при попытке прочитать следующий XML-файл:

<Results>
  <Art>
    <Art>
      <Code>100</Code>
    </Art>
    <Art>
      <Code>200</Code>
    </Art>
    <Art>
      <Code>300</Code>
    </Art>
  <Art>
</Results>

Проблема, с которой я сталкиваюсь, заключается в том, что и родитель, и его потомки называются "Art".

Следующий код работает нормально, только если родитель назван, например, «Arts», а его дети названы «Art»:

$xml_path = '/path_to_file/file.xml';
$reader = new XMLReader();
if ($reader->open($xml_path)) {
  while ($reader->read() && $reader->name !== 'Art');
  while ($reader->nodeType == XMLReader::ELEMENT && $reader->name === 'Art') {
    $node = simplexml_load_string($reader->readOuterXML());

    // Get the "Code" in the current "Art".
    $current_code = (string)$node->Code;
    // Do something with $current_code...

    $reader->next('Art');
  }
  $reader->close();
}

Но так как и родителя, и его ребенка называют «искусством», я не могу понять, как получить только детей.

Заранее спасибо!

1 Ответ

0 голосов
/ 30 июня 2018

Мне удалось заставить его работать со следующим кодом:

$xml_path = '/path_to_file/file.xml';
$reader = new XMLReader();
if ($reader->open($xml_path)) {
  while ($reader->read() && $reader->name !== 'Art');
  while ($reader->nodeType == XMLReader::ELEMENT && $reader->name === 'Art') {
    $node = simplexml_load_string($reader->readOuterXML());

    // NEW CODE!
    if (isset($node->Art)) {
      $reader->read();
    }

    // Get the "Code" in the current "Art".
    $current_code = (string)$node->Code;
    // Do something with $current_code...

    $reader->next('Art');
  }
  $reader->close();
}

сводил меня с ума XD

...