Не удается правильно получить XML в Laravel - PullRequest
2 голосов
/ 24 апреля 2019

У меня есть куча файлов XML в каталоге storage/xml.

Я хочу получить все файлы из этого каталога, а затем проанализировать каждый из них.Я пытаюсь использовать simple_xml для этого, но я получаю различные ошибки, как показано ниже.

Попытка # 1:

$files = Storage::files('xml');  //get all files in the dir
foreach($files as $file){
    $xml = simplexml_load_file($file);
}

Это дает нам:

simplexml_load_file(): I/O warning : failed to load external entity "xml/srml-21-2010-f339048-matchresults.xml"

Однако file xml/srml-21-2010-f339048-matchresults.xml существует и является действительным файлом XML.Я успешно проанализировал его с обычным PHP на другом сервере.

Попытка # 2:

$files = Storage::files('xml');  //get all files in the dir
foreach($files as $file){
    $file_contents = Storage::get($file);
    $xml = simplexml_load_string($file_contents) or die("Error: Cannot create object");
    logger()->debug($xml);
}

Это не выдает никаких ошибок, но когда я пытаюсь записать результат, вЯ обнаружил, что в файле журнала logger()->debug($xml) печатаются только 3 пустые строки.Ничего более.Однако, если я попробую logger () -> debug ($ file_contents), я получу то, что выглядит как правильные данные:

[2019-04-24 14:50:31] local.DEBUG: <?xml version="1.0" encoding="UTF-8"?>
<!-- Copyright 2001-2019 Opta Sportsdata Ltd. All rights reserved. -->

<!-- PRODUCTION HEADER
     produced on:        valde-jobq-a01.nexus.opta.net
     production time:    20190304T081850,751Z
     production module:  Opta::Feed::XML::Soccer::F7
-->
<SoccerFeed TimeStamp="20190304T081848+0000">
  <SoccerDocument Type="Result" detail_id="1" uID="f339048">
    <Competition uID="c21">
        etc etc

Я не хочу использовать такую ​​библиотеку, как XmlParser (или любую другую библиотеку).У меня не возникнет проблем с разбором данных, мне просто нужна помощь, чтобы получить их.Что я делаю не так?

1 Ответ

0 голосов
/ 13 мая 2019

Я создал пакет, который снимает боль XML с PHP.https://github.com/mtownsend5512/xml-to-array Под капотом используется объект DOMDocument для анализа XML.Он даже поставляется с глобальным помощником Laravel, если вы предпочитаете такие вещи.

$files = Storage::files('xml');  //get all files in the dir
foreach($files as $file) {
    $xml = xml_to_array($file);
    // or $xml = XmlToArray::convert($file);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...