在laravel中解析XML文件

时间:2016-07-14 16:06:07

标签: php xml parsing laravel-5.2

我想从我的计算机中选择要解析的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);
    }

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

当你说"解析"你什么意思?查找节点?删除节点?添加节点?或者只读节点?

因为您可以使用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);

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

答案 1 :(得分:0)

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

我建议你使用内置的PHP核心simplexml_load_file()函数来帮助我完成这个项目。因为你永远不会让Laravel将xml解析成一些像样的不可扩展的数组或对象来通过Request $ file injections等工作。这对于使用html-forms或json很好,而不是用xml或其他格式。

这就是为什么你应该使用对象,这将是(例如)这样的代码的结果:

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

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