将远程XML Feed保存为本地文件...损坏?

时间:2012-11-05 14:51:51

标签: php xml

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

目前我正在使用以下代码:

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

及其工作......它将XML Feed保存为本地文件。然而,它的“回归”或“换行”已经被剥离了,它略有腐败。由于这些更改,读取本地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 Feed,请将其保存为.xml并上传到服务器,它可以正常工作。

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

2 个答案:

答案 0 :(得分:1)

不要相信这里有腐败现象。

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

正如您所看到的那样,在源块之后,该源并未完全被新行所覆盖。我没有看到你的示例块(<ApplicationArea>),但有很多建议你认为正确的空格只是由chrome引入的格式,而不是源文件。

无论如何,不​​确定为什么你希望它的格式是这样的(除非你是字符串解析而不是XML),但修复此问题的方法是使用整洁扩展(必须在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版本。例如:(左=前,右=后整理)

enter image description here

答案 1 :(得分:0)

这不是“腐败”。从我从下载此URL看到的情况来看,源URL不会一致地使用换行符,并且它确实有很长的XML,没有换行符。

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

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