我在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"
但是,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这样的库(或任何其他库)。我解析数据不会有任何问题,我只需要帮助就可以真正掌握它。我在做什么错了?
答案 0 :(得分:0)
我创建了一个软件包,该软件包消除了PHP对XML的困扰。 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);
}