0

我有一个输出 XML 提要的外部 Web 服务。
我需要获取 XML 提要并将其保存为本地文件..(大约 3mb)

目前我使用以下代码:

<?PHP
$url = "https://services.boatwizard.com/bridge/events/ae0324ff-e1a5-4a77-9783-f41248bfa975/boats?status=on";
copy($url, "download.xml");
?>

及其工作...它将 XML 提要保存为本地文件。但是,在“返回”或“换行符”已被剥离的意义上,它略有损坏。由于这些更改,读取本地 XML 的脚本无法与 download.xml 一起使用。

例如..它应该看起来像这样:

<ApplicationArea>
<Sender>
<LogicalID>IMT</LogicalID>
<TaskID>Inventory Sync</TaskID>
<CreatorNameCode>IMT Exporter</CreatorNameCode>
<SenderNameCode>IMT</SenderNameCode>
</Sender>

而不是这样...

<ApplicationArea><Sender><LogicalID>IMT</LogicalID><TaskID>Inventory Sync</TaskID><CreatorNameCode>IMT Exporter</CreatorNameCode><SenderNameCode>IMT</SenderNameCode></Sender>

我不是程序员,不知道如何解决这个问题,或者是否可以!如果我要打开 Chrome 并浏览到 xml 提要,将其保存为 .xml 并上传到服务器,它工作正常。

有人可以帮我编写一个脚本,它可以安全地下载 XML 提要而不会损坏它吗?!!

4

2 回答 2

1

不要相信这里有腐败。

拉起视图源https ://services.boatwizard.com/bridge/events/ae0324ff-e1a5-4a77-9783-f41248bfa975/boats?status=on

如您所见,该源代码并没有在块之后完全添加换行符。我没有看到您的示例块(<ApplicationArea>),但是有很多建议您认为正确的空格只是 chrome 引入的格式,而不是源文件。

无论如何,不​​知道为什么要这样格式化(除非您是字符串解析而不是 XML),但解决此问题的方法是使用tidy扩展名(必须在 PHP 中配置)。

$xml = file_get_contents( "https://..." ); // your url here

// look up other tidy options to get a satisfactory format
$options = array(
    "input-xml" => true,
    "indent" => true,
    "wrap" => "160",
    "output-xml" => true,
);

$tidy = tidy_parse_string($xml, $options);

$tidy->cleanRepair();

此时,保存或预览 $xml,您将拥有一个更简洁的 XML 版本。例如:(左=之前,右=整理之后)

在此处输入图像描述

于 2012-11-05T15:09:41.057 回答
0

这不是“腐败”。从我下载这个 url 中可以看出,源 url 并没有一致地使用换行符,并且它确实有很长的 XML 没有换行符。

在任何情况下,您担心的空白对 XML 来说并不重要,并且任何因该空白而中断的脚本很可能无法正确处理 XML。(例如,它可能使用正则表达式而不是适当的 XML 解析器。)

copy()函数将为您提供从 url 检索到的内容的逐字节副本——它不会通过删除换行符来“破坏”它(如您所说)。错误可能在于您的处理脚本,由于换行符的这种差异,它不应该“中断”。

于 2012-11-05T15:02:30.353 回答