我正在尝试使用orchestra解析XML到数组,orchestra是Laravel的XML Document Parser包。当我尝试运行代码时,我收到一条错误,指出无法解析字符串中的XML。下面是我试图解析为数组的test.xml文件。
<?xml version="1.0" encoding="utf-8"?>
<api>
<user followers="5">
<id>1</id>
<email>crynobone@gmail.com</email>
</user>
</api>
在我的Controller中,我正在尝试解析xml文件
public function index()
{
$xml = XmlParser::load('test.xml');
$user = $xml->parse([
'id' => ['uses' => 'user.id'],
'email' => ['uses' => 'user.email'],
'followers' => ['uses' => 'user::followers'],
]);
print_r($user);
}
有没有人知道为什么我无法将xml解析为数组?
答案 0 :(得分:2)
XmlParser
中{p} simplexml_load_file
throws that error in the event of a basic failure与您传入的文件的路径。鉴于您没有指定文件的完整路径,我的猜测是PHP的当前目录并不是您的想法,因此失败只是意味着解析器无法找到该文件。尝试使用文件的完整路径。
答案 1 :(得分:0)
我遇到了同样的问题,但是Orchestral在错误消息中没有提供有用的提示。
由于它是基于 SimpleXml 的,因此我尝试使用SimpleXml加载它,方法是:
<?php
$xml=simplexml_load_file("your_filename_with_full_path.xml") or die("Error: Cannot create object");
print_r($xml);
?>
那给了我消息
parser error : Opening and ending tag mismatch: channel line 6 and item {"exception":"[object] (ErrorException(code: 0): simplexml_load_file(): file:/C:/.../storage/import/import.xml:242: parser error : Opening and ending tag mismatch: channel line 6 and item at ..........\\AbcController.php:24)
好吧,更好地解释原因。
然后我在修复XML后向Orchestral进行了重试,它立即起作用。