質問

ベータ版の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 &amp; Stylus        <artist>Statik, Jahsonic &amp; Stylusre />
  </Song>
</result>

そのタグが表示されますか?そのようなことができたら、曲全体をスキップして次の曲を取得したいと思います。

これを達成する方法はありますか?

役に立ちましたか?

解決

  1. Webサービスプロバイダーに書き込みます。不正なXMLについて説明します。彼らはただそれを修正するかもしれません。
  2. 不正な形式のXMLが返されると、FlexのデフォルトのXMLデコーダーが失われ、スローされます。
  3. 処理を試行する場合は、独自のデコーダーをロールします。 xmlDecode を参照してください。 HTTPService のメンバー。

他のヒント

Beautiful Soup はこれを行いますが、Pythonで書かれています。もちろん、常にソースを掘り下げて、どのように実装されているかを確認できます。

エラーのクラスの数が少ない場合、XMLを前処理してエラーを削除し、パーサーに渡します。これにより、問題が修正されたときに簡単に回避策を削除できます。上記の場合、ファイルをテキストとしてロードし、重複するタグを持つノードを探し、XMLテキストからノード全体を削除します。

または単にWebサービスプロバイダーに通知して待機します-不正なXMLを返している場合は、ほぼすべてのパーサーがそれを停止し、すぐに修正するインセンティブが必要になります。

いいえ、通常のXMLパーサーでは、不正な形式のXMLドキュメントの一部を無視することはできません。 Flexコンパイラに構文エラーを無視し、コーダーが実際に何をするのかを理解するように依頼するようなものです。奇形とは何か、無視できるものを推測しようとする独自のパーサーを作成する必要があります。

正直なところ、悪いXMLを送信するWebサービス(ベータ版でも)は信頼できません。 XMLを「手作業で」作成していることを意味します。プログラマチッククラスを使用する代わりに。これを行うと、他の多くのエラー、特にリグレッションが発生する可能性が高くなります。あなたの時間は彼らに頼るには貴重すぎる。

乾杯

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top