我有一个输出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而不会破坏它吗?!!
答案 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版本。例如:(左=前,右=后整理)
答案 1 :(得分:0)
这不是“腐败”。从我从下载此URL看到的情况来看,源URL不会一致地使用换行符,并且它确实有很长的XML,没有换行符。
在任何情况下,您担心的空白对XML并不重要,因为这个空格而中断的任何脚本很可能无法正确处理XML。 (例如,它可能使用正则表达式而不是正确的XML解析器。)
copy()
函数将为您提供从URL中检索内容的逐字节副本 - 它不会通过剥离换行符“破坏”它(正如您所说)。错误可能在于您的处理脚本,由于换行符的这种差异,它不应该“破坏”。