У меня возникли проблемы с анализом различных типов XML во флэш-памяти (в частности, файлов RSS FeedBurner и ответов API данных YouTube). Я использую 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
. Единственное решение, которое мы придумали, - это установить таймер на событие и, по сути, «подождать несколько секунд», прежде чем начинать анализировать данные. Конечно, это не может быть лучшим способом сделать это.
Есть ли надежный способ анализа XML во Flash?
Обновление 2 сентября 2008 Мы пришли к следующему выводу: в этот момент в коде запускается исключение:
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 фактически анализируется объект)?
@ Тео: Спасибо за подсказку ignoreWhitespace. Также мы определили, что событие вызывается до его готовности (мы провели несколько тестов, отслеживающих mainXMLLoader.bytesLoaded + "/" + mainXMLLoader.bytesLoaded