不正な形式のXMLパーツを解析/無視する方法は?
-
03-07-2019 - |
質問
ベータ版のWebサービスAPIを使用するAirアプリケーションを作成しています。このAPIから不正なXMLノードが返され、そこからXMLオブジェクトを作成しようとすると、ActionScriptでエラーが発生することがあります。
これまでやってきたことは、結果を試す/キャッチするだけで、XMLが悪い場合は応答全体を無視しますが、不正な形式のノードは無視できます。
例:
<result>
<Song>
<location>http://www.anyurl.com/audio/loftparty092108_pt4.mp3</location>
<title>Phonte party @ The Loft, 9/21/08 (pt. 4)</title>
<artist>Statik, Jahsonic & Stylus <artist>Statik, Jahsonic & Stylusre />
</Song>
</result>
そのタグが表示されますか?そのようなことができたら、曲全体をスキップして次の曲を取得したいと思います。
これを達成する方法はありますか?
解決
- Webサービスプロバイダーに書き込みます。不正なXMLについて説明します。彼らはただそれを修正するかもしれません。
- 不正な形式のXMLが返されると、FlexのデフォルトのXMLデコーダーが失われ、スローされます。
- 処理を試行する場合は、独自のデコーダーをロールします。
xmlDecode
を参照してください。HTTPService
のメンバー。
他のヒント
Beautiful Soup はこれを行いますが、Pythonで書かれています。もちろん、常にソースを掘り下げて、どのように実装されているかを確認できます。
エラーのクラスの数が少ない場合、XMLを前処理してエラーを削除し、パーサーに渡します。これにより、問題が修正されたときに簡単に回避策を削除できます。上記の場合、ファイルをテキストとしてロードし、重複するタグを持つノードを探し、XMLテキストからノード全体を削除します。
または単にWebサービスプロバイダーに通知して待機します-不正なXMLを返している場合は、ほぼすべてのパーサーがそれを停止し、すぐに修正するインセンティブが必要になります。
いいえ、通常のXMLパーサーでは、不正な形式のXMLドキュメントの一部を無視することはできません。 Flexコンパイラに構文エラーを無視し、コーダーが実際に何をするのかを理解するように依頼するようなものです。奇形とは何か、無視できるものを推測しようとする独自のパーサーを作成する必要があります。
正直なところ、悪いXMLを送信するWebサービス(ベータ版でも)は信頼できません。 XMLを「手作業で」作成していることを意味します。プログラマチッククラスを使用する代わりに。これを行うと、他の多くのエラー、特にリグレッションが発生する可能性が高くなります。あなたの時間は彼らに頼るには貴重すぎる。
乾杯