在 laravel 中解析 XML 文件

Posted

技术标签:

【中文标题】在 laravel 中解析 XML 文件【英文标题】:Parse XML file within laravel 【发布时间】:2016-11-17 15:49:27 【问题描述】:

我想从我的计算机中选择一个 XML 文件进行解析。该表格有效,我可以使用 Input::file('file');功能。但是,我想通过仅将其作为临时文件上传来解析此文档。当我想解析它时,我得到如下错误:“无法从字符串解析”。解析器似乎找不到该文件。我尝试了两个解析器:SimpleXML 和 XMLParser(来自管弦乐队)。

public function uploadFile(Request $ file)
$data =Input::file('file');
$informationdata = array('file' => $data);
$rules = array(
    'file' => 'required|mimes:xml|Max:10000000',
    );
    $validator=  Validator::make($informationdata, $rules);
    if($validator->fails())
        echo 'the file has not the correct extension';
     else
        XmlParser::load($data->getRealPath());
    

我也尝试在存储文件后解析它。

private function store($data)
    $destinationPath = public_path('uploads\\');
    $fileName = $data->getClientOriginalName();
    $data->move($destinationPath,$fileName);
    $xml = simplexml_load_file($destinationPath.$fileName);
    

提前感谢您的帮助。

【问题讨论】:

【参考方案1】:

当您说“解析”时,您是什么意思?寻找节点?删除节点?添加节点?还是只读取节点?

因为您可以使用 SimpleXMLElement 类查找和阅读,但如果您想添加或删除,我建议您改用 DomDocument。

使用 SimpleXMLElement,构造将是:

$xml = new SimpleXMLElement($destinationPath.$fileName, null, true);

虽然 DomDocument 是:

$xml = new DomDocument('1.0', 'utf-8'); // Or the right version and encoding of your xml file
$xml->load($destinationPath.$fileName);

创建对象后,您可以处理所有文档。

【讨论】:

XML 文件包含一个大的 (base64) 字符串,必须从文件中检索该字符串。下一步是解码这个字符串,这给了我另一个 xml 字符串。 将代码调整为您的 SimpleXMLElement 示例后,出现以下错误:simplexml_load_file(): file:///C:/path/to/file.xml:29: parser error : Extra content在文档末尾 这意味着您的 XML 格式不正确。你为什么不展示你的xml文件的样本?【参考方案2】:

目前尚不清楚,您是想验证计算机上的一些现有 xml 文件,还是想实现用户上传任何 xml 文件并编写一些逻辑来处理此任务的能力。然而,这不是重点。

我建议您使用 php 核心内建的 simplexml_load_file() 函数,该函数对我的项目有帮助。因为你永远不会让 Laravel 将 xml 解析为一些体面的、可理解的数组或对象,以便通过 Request $file 注入等方式使用。这适用于 html-forms 或 json,而不适用于 xml 或其他格式。

这就是为什么您应该使用将是(例如)此类代码的结果的对象:

$xml_object = simplexml_load_file($request->file('action')->getRealPath());

然后你需要自己验证每个 xml 节点和字段,编写一些逻辑,因为你失去了使用 Laravel 内置的 Illuminate\Http\Request validate() 方法的可能性。

【讨论】:

以上是关于在 laravel 中解析 XML 文件的主要内容,如果未能解决你的问题,请参考以下文章

我想自学laraver,请诸位前辈给一些建议,谢谢

Larave中CSRF攻击

无法在 Laravel 中正确获取 XML [重复]

larave学习笔记1-安装配置

如何在子目录 Laravel 中正确配置 htaccess?

htaccess for laravel 在所需文件夹中