0

XML フィードを出力する外部 Web サービスがあります。
XML フィードを取得し、ローカル ファイルとして保存する必要があります.. (約 3 MB)

現在、次のコードを使用しています。

<?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>)たが、あなたが適切な空白だと思うのは、ソースファイルではなく、クロムによって導入されたフォーマットであることを示唆するものがたくさんあります.

とにかく、なぜそのようにフォーマットする必要があるのか​​ わかりません(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 に答える