【问题标题】:PHPExcel factory error when reading XML from URL从 URL 读取 XML 时出现 PHPExcel 工厂错误
【发布时间】:2014-05-23 19:20:47
【问题描述】:

如何从 URL XML 数据创建 XML 阅读器? 我从一个 URL 向PHPExcel 工厂的identify() 提供了有效的 XML 数据,但是脚本触发了一个错误:

( ! ) 致命错误:未捕获的异常 'PHPExcel_Reader_Exception' 与 消息'在 C:\wamp\www\project\Classes\PHPExcel\Reader\Excel2007.php 在第 82 行

( ! ) PHPExcel_Reader_Exception: 无法打开 阅读!文件不存在。在 C:\wamp\www\project\Classes\PHPExcel\Reader\Excel2007.php 在第 82 行

$url = "http://www.w3schools.com/xml/note.xml";
$xml = simplexml_load_file($url); //OR $xml = simplexml_load_string(file_get_contents($url));
$inputFileType = PHPExcel_IOFactory::identify($xml); // ERROR

更新:

$dom = new DOMDocument();
$dom->load($url);
$fileName = 'filename.xml';
$xml = $dom->save($fileName);
$inputFileType = PHPExcel_IOFactory::identify($xml);

( ! )致命错误:未捕获的异常 'PHPExcel_Reader_Exception' 与 消息'无法打开 116752 进行阅读!文件不存在。'在 C:\wamp\www\project\Classes\PHPExcel\Reader\Excel2007.php 在第 82 行

(!) PHPExcel_Reader_Exception: 无法打开 116752 进行阅读!文件 不存在。

【问题讨论】:

  • 关于您的编辑:您将文件保存到 $fileName 但传递 PHPExcel 一个不同的变量。您实际上根本不需要解析 XML 文件,只需下载它,以便您有一个文件名来提供 PHPExcel。
  • 我不知道您希望 PHPExcel 对该文件做什么。期望它能够读取任何 XML 文件并将其转换为有用的电子表格,这有点像期望有人用英语对任何可能的问题给出有用的答案。
  • 我想我明白了。我将文件而不是文件名传递给identify() 的文件本身。我现在尝试将其保存为 Excel。我想要做的基本上是从 URL 中获取 XML,将其保存为服务器上的 XML 文件(因为 PHPExcel 似乎无法从 URL 读取数据,然后打开本地保存的 XML 并将其保存为 Excel)。似乎有点不必要的复杂,但我认为这是因为 PHPExcel 的不足(我不确定,也许有一种方法可以将 XML 从 URL 直接读取到 identify
  • 您不需要 SimpleXML 或 DOM 来下载文件,例如:您可以使用 file_get_contents() 和 file_put_contents()。那时它是 XML 并没有什么特别之处。

标签: php xml phpexcel


【解决方案1】:

PHPExcel 中包含的 XML 阅读器 (PHPExcel_Reader_Excel2003XML) 不适用于任何任意 XML 文件:这需要极高程度的机器智能才能将任意结构的文件解析为电子表格的确定结构。如果不编写您自己的代码,就不可能有一个通用的 XML 阅读器,它可以采用任何 XML 文件结构并将其导入 Excel 文档而无需理解 XML 的结构。

MS Excel 2003 支持一种名为SpreadsheetML 的格式,它是一种具有定义结构的 zip 压缩 XML 文件,并且 - 虽然这种格式很少使用 - PHPExcel_Reader_Excel2003XML 支持使用该格式编写的电子表格文件。 /Examples 文件夹中的 XMLReader.php 文件演示了读取 SpreadsheetML 文件。

SpreadsheetML的详细信息可以找到here

编辑

另请注意,所有 PHPExcel 阅读器期望文件名作为参数,没有人会接受任何格式的原始数据或任何 PHP 对象

【讨论】:

    【解决方案2】:

    PHPExcel 是读取 Excel 文件,而不是 XML。试试 SimpleXML 扩展。

    更新

    所以第 82 行的 C:\wamp\www\project\Classes\PHPExcel\Reader\Excel2007.php 是这样说的:

    if (!file_exists($pFilename)) {
        throw new PHPExcel_Reader_Exception("Could not open " . $pFilename . " for reading! File does not exist.");
    }
    

    这意味着它期望$pFilename 指向文件系统上的实际文件。尝试将您的 $xml 数据保存在某处并将 filename 提供给 PHPExcel_IOFactory::identity()

    【讨论】:

    • 好吧,不幸的是,这并不是那么简单。您可能需要编写更多代码来遍历 XML 中的数据集并(逐行)将其写入 XLS 文件。 SimpleXML 扩展可以帮助您读取和解析 XML 文件,并且 PHPExcel 库确实可以用于创建和保存 XLS。但同样 - 它需要更多的编码。
    • 更新: 我在 PHPExcel 的示例文件夹中找到了 XMLReader.php 示例。它是某种不同的 XML 类型吗?
    • 我需要通过 XML 解析吗?
    • 我想问的是为什么我需要用 SimpleXML 解析 XML?只需从该网站获取 XML 并将其保存为 .xls 文件就是我想要做的。因此,SimpleXML 通过从 URL 加载 XML 来完成第一步。
    • 我尝试使用DOM。请查看我原来的问题。我已经添加了我使用过的代码。它确实将 XML 数据正确地保存为 .xml 文件,尽管 identify() 仍然会引发相同的错误。
    猜你喜欢
    • 1970-01-01
    • 2015-09-15
    • 1970-01-01
    • 2013-05-02
    • 2012-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多