Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   undefined в текстовом поле при загрузке данных из XML (http://www.flasher.ru/forum/showthread.php?t=175582)

AlexG77 20.02.2012 18:54

undefined в текстовом поле при загрузке данных из XML
 
Вложений: 1
Пытаюсь загрузить данные из XML во Flash
Код AS1/AS2:

dataXML = new XML();
dataXML.ignoreWhite = true;
dataXML.onLoad = function(success) {
        name1.text = this.name1;
        name2.text = this.name2;
        };
dataXML.load("data.xml");

вместо текста отображается undefined
Как это вылечить?
Перерыл весь поиск, но ответа не нашел

mooncar 20.02.2012 19:07

Запишите у себя
Код AS1/AS2:

trace(this.name1) //undefined

и увидите, что так обращаться нельзя, XML - это не LoadVars

Вариант 1.
Код:

<?xml version="1.0" encoding="UTF-8"?>
<names>
        <name>Текст 1</name>
        <name>Текст 2</name>
</names>

Код AS1/AS2:

dataXML = new XML();
dataXML.ignoreWhite = true;
dataXML.onLoad = function(success) {
        if (success)
        {
                var xmlnode:XMLNode = this.firstChild ; //это корневой узел <names>
                name1.text = xmlnode.childNodes[0].firstChild.toString();
                name2.text = xmlnode.childNodes[1].firstChild.toString();
        }
};
dataXML.load('data.xml');

Кооментарий
Код AS1/AS2:

xmlnode.childNodes[0].firstChild.toString();

Узел xmlnode - здесь это корневой узел <names>

Массив childNodes
Это массив узлов корневого узла, то есть все эти <name>.

Узел firstChild
Первый узел узла <name>. Текст - это тоже узел, доступ к нему можно получить так.



Вариант 2. Автоматически циклом по произвольному количеству узлов.

Атрибут id - не используется, но может понадобится, хотя бы чтобы не запутаться при формировании конфига.
С переменной цикла i он не связан, пока сами не захотите.

Код:

<?xml version="1.0" encoding="UTF-8"?>
<names>
        <name id="1">Текст 1</name>
        <name id="2">Текст 2</name>
</names>

Код AS1/AS2:

dataXML = new XML();
dataXML.ignoreWhite = true;
dataXML.onLoad = function(success) {
        if (success)
        {
                var xmlnode:XMLNode = this.firstChild ;
                var total:Number = xmlnode.childNodes.length ;
 
                for (i = 0; i < total; i++)
                {
                        _root['name' + (i + 1)].textxmlnode.childNodes[i].firstChild.toString();
                }
        }
};
dataXML.load('data.xml');


AlexG77 20.02.2012 20:01

Спасибо! Первый вариант полностью устраивает!


Часовой пояс GMT +4, время: 15:06.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.