php-无法从字符串解析XML-Laravel存储

时间:2018-07-18 13:32:15

标签: php xml laravel

我正在将Orchestra/parser用于Laravel。我已经按照文档中的说明进行了安装,并且尝试使用它读取服务器上可用的XML文件。我有一个FTP服务器,自动报告被传递到该服务器。我需要将文件从FTP服务器下载到公用磁盘上:

    //Search for the files.
    $fileName = array_filter(Storage::disk('ftp')->files("/reports"), function ($file)
    {
        //This get filename from the FTP server (/reports folder), that includes the current date (YYYY-MM-DD) in the file name.
        return preg_match('/'.date("Y", time()).'\-'.date("m", time()).'\-'.date("d", time()).'(.*)\.[a-zA-Z]{3}/m', $file);

    });

我可以使用上述代码在FTP服务器上找到文件。可以。

接下来,我将文件从FTP服务器移到我的公共帐户:

    //Set the new filename. We use this later on, when we move the file.
    $new_fileName = "milestone_report_".date("Y-m-d", time()).".xml";
    //$fileName[0] already includes the /reports path.
    $move_file = Storage::disk("public")->put("/reports/".$new_fileName."", Storage::disk('ftp')->get($fileName[0])); 

这也可以。最后,我需要能够使用XmlParser来读取/获取.xml文件的内容。我喜欢文档中所述的内容:

//Load the new file, so we can use it with the "xml parser package"
$xml = XmlParser::load("/storage/app/public/reports/".$new_fileName."");

但是,上面的错误提示我如下:

  

无法从字符串中解析XML。

  • 我已验证XML文件确实位于Laravel的存储文件夹中。 / storage / app / public / reports

更新:

我已尝试从公用文件夹www.domain.com/xmlfile.xml加载XML文件,并且此操作应像应该的那样!

如何使用XmlParser从存储中加载?

     --

1 个答案:

答案 0 :(得分:0)

所以我想出了这个。我没有使用XmlParser::load()函数,而是使用了XmlParser::extract()函数,并使用Storage::disk()提取了文件,如下所示:

$xml = XmlParser::extract(Storage::disk('public')->get("/reports/".$new_fileName.""));

之所以给我错误“无法从字符串解析XML”的原因,是因为以前我只获取XML文件的路径(只是一个字符串)。 XmlParser需要将文件直接加载到方法中。