Flash 内のさまざまな種類の XML (具体的には、FeedBurner RSS ファイルと YouTube Data API 応答) の解析で問題が発生しています。を使用しURLLoader
て XML ファイルをロードしEvent.COMPLETE
、新しい XML オブジェクトを作成しています。これは 75% の確率で問題なく動作しますが、時々、次のような例外が発生します。
TypeError: Error #1085: The element type "link" must be terminated by the matching end-tag "</link>".
問題は XML が大きいことでありEvent.COMPLETE
、XML が実際に からダウンロードされる前にイベントが発生した可能性がありURLLoader
ます。私たちが思いついた唯一の解決策は、イベント時にタイマーを設定し、基本的に「数秒待ってから」データの解析を開始することです。確かに、これはこれを行うための最良の方法ではありません。
Flash 内で XML を解析する確実な方法はありますか?
更新 2008 年 9 月 2 日次の結論に達しました。この時点でコード内で例外が発生します。
data = new XML(mainXMLLoader.data);
// calculate the total number of entries.
for each (var i in data.channel.item){
_totalEntries++;
}
この部分に try/catch ステートメントを配置し、現在、エラーが発生したときに画面にエラー メッセージを表示しています。私の質問は、不完全なファイルがどのようにしてこの時点に到達するbytesLoaded == bytesTotal
かです。
元の質問をステータス レポートで更新しました。別の質問は、データにアクセスする前にオブジェクトが適切に解析されているかどうかを判断する方法があると思いXML
ます (エラーが、XML が実際にオブジェクトに解析される前にオブジェクトの数をカウントするループが開始されている場合) ?
@Theo:ignoreWhitespace のヒントをありがとう。また、準備が整う前にイベントが呼び出されていることも確認しました (いくつかのテスト トレースを行いました)。mainXMLLoader.bytesLoaded + "/" + mainXMLLoader.bytesLoaded