Не удается прочитать данные XML во флэш-память - PullRequest
0 голосов
/ 08 декабря 2009

Я пишу простой xml-код и пытаюсь прочитать xml-файл во флэш-память, но я получил «undefined» в своем выводе. Коды следующие. Вы знаете, как решить проблему? Спасибо.

XML-файл (test.xml):

<?xml version='1.0' encoding='ISO-8859-1'?>
<note>
 <to>Tom</to>
 <from>Peter</from>
 <heading>Reminder</heading>
 <body>Don't forget me this weekend!</body>
</note>

Программа Flash:

xmlDoc=loadXMLDoc("test.xml");
x=xmlDoc.getElementsByTagName("to")[0];
t1.text=x.childNodes[0].nodeValue;

С уважением, John

1 Ответ

1 голос
/ 08 декабря 2009

Вы уверены, что содержимое вашего XML-файла - это всего лишь одна строка?

Tom Peter Reminder Don't forget me this weekend! 

Если так, то это может быть вашей проблемой прямо здесь. Или, если ваши теги отсутствуют в вопросах, это потому, что вам нужно указать StackOverflow форматировать его как код, выбрав его и нажав кнопку кода (или Ctrl + K). Пожалуйста, измените ваш вопрос, в противном случае я не могу сказать, есть ли проблема с оператором, который вы использовали для анализа XML.

Другая проблема Я вижу в вашем ActionScript:
Вы не можете загрузить файл XML, а затем сразу же проанализировать его, потому что это не происходит последовательно (происходит в другом потоке). Вам нужно использовать URLLoader для загрузки XML и добавить прослушиватель событий для URLLoader s Event.COMPLETE. В этом методе делайте то, что вам нужно, с анализом XML.


Я предполагаю, что вы используете AS3, а не AS2

РЕДАКТИРОВАТЬ: Добавлен пример кода

В основном методе, с которого вы начинаете загрузку из XML

var xmlLoader:URLLoader = new URLLoader();
xmlLoader.addEventListener(Event.COMPLETE, showNote);

Создать новый метод

function showNote(e:Event):void
{    
    var note:XML = new XML(e.target.data);
    var to:String = note.to[0].text();
    var from:String = note.from[0].text();
    var body:String = note.body[0].text();
    //t1.text = "To: " + to + "\nFrom: " + from + "\n\n" + body;
    t1.htmlText = "<p>To: " + to + "</p><p>From: " + from + "</p><p>" + body + "</p>";
}

Обязательно убедитесь, что вы объявили текстовое поле на сцене с именем экземпляра t1, и установите для его свойств многострочное с переносом, чтобы это работало.

В общем, я думаю, что проблема с вашим исходным кодом была одна из следующих:

  1. Вы хотели получить строку, и чтобы получить ее от узла XML, вам нужно использовать метод text(). Есть и другие способы, но они самые основные.
  2. То, как вы обходите дерево XML с использованием getElementsByTagName и childNodes, может быть или не быть правильным, но, безусловно, легче ошибиться. AS3 предоставляет гораздо более интуитивно понятные средства для получения материала из XML, такого как тот, который я дал в моем примере.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...