Добавить / удалить из XMLList в цикле
-
06-07-2019 - |
Вопрос
Я пытаюсь проанализировать какой-то XML, полученный мной через e4x в HTTPService. Цикл работает и для каждого эпизода в списке проходит цикл. Однако я получаю следующую ошибку при попытке добавить в XMLList.
TypeError: Error #1009: Cannot access a property or method of a null object reference.
Я пытаюсь запросить локальную базу данных SQLite и посмотреть, существует ли эпизод (работает) и добавляется ли он к одному списку xmllist, а если нет, то добавляется к другому списку xmllist.
public static function seasonFavHandler(evt:ResultEvent):void {
Application.application.ManagePage.selectedShow =
Application.application.ManagePage.gridFavourites.selectedItem as XML;
episodeNumber = XML(evt.result).descendants("episode");
var episode:Object = episodeNumber;
for each(episode in episodeNumber) {
currentEpisode = episode as XML;
achkStatement = new SQLStatement();
achkStatement.sqlConnection = dbconnection;
achkStatement.text = "select :episodename from episodes where episodename = :episodename";
achkStatement.parameters[":episodename"] = episode.title;
achkStatement.addEventListener(SQLEvent.RESULT, episodeHandler);
achkStatement.execute();
trace(episode.title);
}
//Application.application.ManagePage.episodeList = episodeNumber;
seasonHttpService.removeEventListener(ResultEvent.RESULT, seasonFavHandler);
CursorManager.removeBusyCursor();
}
private static function episodeHandler(event:SQLEvent):void {
var result:SQLResult = achkStatement.getResult();
var episodeNewT:XMLList;
var episodeWatchedT:XMLList;
if (!result.data) {
episodeNewT.appendChild(currentEpisode);
//Application.application.ManagePage.gridUnwatched.addChild(currentEpisode);
} else {
episodeWatchedT.appendChild(currentEpisode);
//Application.application.ManagePage.gridWatched.addChild(currentEpisode);
}
Application.application.ManagePage.episodeNew = episodeNewT;
Application.application.ManagePage.episodeWatched = episodeWatchedT;
achkStatement.removeEventListener(SQLEvent.RESULT, episodeHandler);
}
Решение
Вы объявили episodeNewT
и episodeWatchedT
, но еще не создали их экземпляры. Я бы также предложил вам использовать XMLListCollection
вместо XMLList
, поскольку его легче изменить во время выполнения.
Попробуйте это:
var episodeNewT:XMLListCollection = new XMLListCollection();
var episodeWatchedT:XMLListCollection = new XMLListCollection();
if (!result.data) {
episodeNewT.addItem(currentEpisode);
} else {
episodeWatchedT.addItem(currentEpisode);
}
Application.application.ManagePage.episodeNew = episodeNewT.copy();
Application.application.ManagePage.episodeWatched = episodeWatchedT.copy();
Теперь ваши переменные не будут нулевыми, и вы можете добавить их. Обратите внимание, что вы будете преобразовывать XMLListCollection
обратно в XMLList
в конце всего этого с помощью copy ()
.
Другие советы
это мое решение для добавления узлов xml в xmllist динамически. Р>
private function addXmlChild(xmlList:XMLList, xmlNode:XML):void
{
try
{
if(xmlList.children().length() != 0)
{
xmlList[xmlList.length() + 1] = xmlNode;
}
else
xmlList[0] = xmlNode;
}
catch(error:Error)
{
LogWriter.ErrorLog("addXmlChild, " + error.message);
}
}
Но если вы хотите работать с XMLList, вы можете попробовать следующее:
var episodeNewT:XMLList;
var episodeWatchedT:XMLList;
if (!result.data) {
episodeNewT= XMLList(currentEpisode);
//Application.application.ManagePage.gridUnwatched.addChild(currentEpisode);
} else {
episodeWatchedT = XMLList(currentEpisode);
//Application.application.ManagePage.gridWatched.addChild(currentEpisode);
}