无法从字符串解析XML

时间:2016-02-15 09:24:26

标签: php xml laravel-5

我正在尝试使用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解析为数组?

2 个答案:

答案 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进行了重试,它立即起作用。