Php 无法在Laravel中正确获取XML

Php 无法在Laravel中正确获取XML,php,xml,laravel,Php,Xml,Laravel,我在storage/XML目录中有一堆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

我在storage/XML目录中有一堆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"
但是,文件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\u内容,我会得到看起来正确的数据:

[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这样的库或任何其他库。我在解析数据方面不会有问题,我只需要帮助实际掌握它。我做错了什么?

我创建了一个包,用PHP消除了XML带来的痛苦。在后台,它使用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);
}

我创建了一个使用PHP消除XML痛苦的包。在后台,它使用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);
}

尝试logger->debug$xml->asXML;检查加载的内容。@NigelRen正确记录实际XML。然而,若我尝试获取$xml->SoccerDocument->attributes,而不是像['Type'=>'Result','detail\u id'=>1',uID'=>'f339048']这样的数组,我只获取字符串'Result'。我以前从未遇到过这些XML文件的问题。似乎我已经正确加载了XML,但由于某些原因,日志记录没有按预期工作;你得到正确的值了吗?@NigelRen是的,我得到了,我刚刚试过。但是如何让整个元素/属性列表的日志工作?我想这才是真正的问题。XML变得非常复杂,它是一场包含多个级别的球员、事件、属性等的完整足球比赛。因此,简单的日志记录将非常有用。好的,我建议您创建一个新问题,假设您可以加载XML,显示XML内容和要显示的内容。我要出去一个小时左右,但我回来后会看看;检查加载的内容。@NigelRen正确记录实际XML。然而,若我尝试获取$xml->SoccerDocument->attributes,而不是像['Type'=>'Result','detail\u id'=>1',uID'=>'f339048']这样的数组,我只获取字符串'Result'。我以前从未遇到过这些XML文件的问题。似乎我已经正确加载了XML,但由于某些原因,日志记录没有按预期工作;你得到正确的值了吗?@NigelRen是的,我得到了,我刚刚试过。但是如何让整个元素/属性列表的日志工作?我想这才是真正的问题。XML变得非常复杂,它是一场包含多个级别的球员、事件、属性等的完整足球比赛。因此,简单的日志记录将非常有用。好的,我建议您创建一个新问题,假设您可以加载XML,显示XML内容和要显示的内容。我要出去一个小时左右,但我回来后会看看。