SimpleXML-Load Child пытается получить свойство - PullRequest
0 голосов
/ 18 мая 2018

У меня следующая проблема, и я не могу найти свою ошибку, вероятно?

Я пытаюсь загрузить следующую структуру XML (более 15 000 строк):

<Config>
  <SystemFiles>
  <Core>
    <Info>
    <Network>
    <Capture>
    <Store>
      <Mount01>
      <Mount02>
    </Store>
  </Core>
</Config>

Мне нужнодоступ к Подструктуре магазина с каждым дочерним объектом.Моя функция выглядит так:

  public static function get_storage_data()
  {
    if(file_exists('/var/www/content/data/data.xml')) :
        $xml = simplexml_load_file('/var/www/content/data/data.xml');
        foreach ($xml->Config->Core->Store->children() as $mount) {
          echo $mount;
        }
    else:
        write_log(sprintf("data.xml not found"));
    endif;
  }

, которая генерирует следующие ошибки (строка 8 - строка foreach):

Notice
: Trying to get property 'Store' of non-object in
/var/www/inc/storage.inc
on line
8

Fatal error
: Uncaught Error: Call to a member function children() on null in /var/www/inc/storage.inc:8 Stack trace: #0 /var/www/storage.php(30): Storage::get_storage_data() #1 {main} thrown in
/var/www/inc/storage.inc
on line
8

Что я здесь забыл или в чем моя ошибка?Спасибо!

1 Ответ

0 голосов
/ 18 мая 2018

Вам не нужно включать имя корневого узла при использовании SimpleXML для синтаксического анализа XML - он уже привязан на этом уровне.

Вы должны просто иметь возможность изменить путь с

$xml->Config->Core->Store->children()

до

$xml->Core->Store->children()

Примечание. Я предполагаю, что ваши узлы <Mount01> и <Mount02> просто содержат текстовое содержимое, поскольку в противном случае вы не сможете их отобразить.

Смотрите здесь для обработанного примера: https://eval.in/1006543

...