2012-11-05 46 views
1

我有一個外部Web服務輸出XML提要。
我需要使用下面的代碼來獲取XML提要並保存爲本地文件。(大約3MB)將遠程XML Feed保存爲本地文件...損壞?

目前進口:

<?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 feed,請將其保存爲.xml並上傳到服務器,它可以正常工作。

有人可以幫我編寫一個腳本,可以安全地下載XML Feed而不會損壞它嗎?

+0

你能更具體的瞭解一下這個腳本的作用,爲什麼你說,這是「破」?這種換行符的差別不應該破壞任何XML處理腳本 - 對於這種XML文件來說,這不是重要的空白。 –

+0

該腳本從xml文件加載數據,該文件實際上是待售船隻列表。當xml內容在每行之後沒有返回時,該腳本似乎不會產生任何輸出。那麼,事實上它錯誤與「我們目前沒有你正在尋找什麼」等。 –

+0

你確定這是一個換行符問題嗎?而不是那個文件不是腳本可以找到它的地方?或者它可能沒有權限讀取'copy()'腳本創建的文件? –

回答

0

這不是「腐敗」。從我可以看到從下載這個URL,源URL不會一直使用換行符,並且它有很長的XML沒有換行符。

在任何情況下,您擔心的空白對XML沒有意義,並且由於這個空白而導致的任何腳本很可能不會正確處理XML。 (例如,它可能使用的是正則表達式,而不是正確的XML解析器。)

copy()函數將爲您提供從url檢索的字節 - 字節副本 - 它不會「損壞」它(如你所說)通過剝離換行符。這個錯誤可能在於你的處理腳本,由於換行符的不同,它不應該「破壞」。

+0

謝謝弗朗西斯。 基本上,處理XMl的腳本在目錄中查找最新的XML。 我有XML手動上傳,保存在瀏覽上述URL,然後有上述腳本的輸出,保存爲download.xml。 由於download.xml是最新的,該腳本加載這個,但然後不起作用。如果我刪除了download.xml,並讓它找到我使用GoogleChrome保存的文件,它可以正常工作。 以下是處理XML的腳本除外: 確定它不會讓我在這裏適合它... 1400 chars ... 如何向我顯示腳本? –

+0

我想嘗試一下上面的代碼來清理XML,但是最後一行需要什麼來保存整潔的XML作爲文件? –

1

不要相信這裏會發生腐敗。

拉起查看源代碼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

+0

謝謝。 基本上,處理XML的腳本在目錄中查找最新的XML。我有我手動上傳的XML,從保存在瀏覽器中,然後還有上述腳本的輸出,保存爲download.xml。 由於download.xml是最新的,該腳本加載這個,但然後不起作用。如果我刪除了download.xml,並讓它找到我使用GoogleChrome保存的文件,它可以正常工作。 這是一個除了處理XML的腳本之外:好的它不會讓我在這裏適合它... 1400chars ...我怎麼能告訴你的腳本? –

+0

編輯您的原始問題並添加摘錄。 –