Форум 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)
-   -   парсинг xml :D (http://www.flasher.ru/forum/showthread.php?t=97765)

VoCz 28.06.2007 17:18

парсинг xml :D
 
Есть XML такого вида:
Код:

<?xml version="1.0" encoding="utf-8" ?>
<Config>
        <Head>Основной текст</Head>
<TableHeadline>

                        <Name>имя</Name>
                        <Info>инфо</Info>
</TableHeadline>
        <Objects>
                <Item>
                        <Name>имя1</Name>
                        <Info>инфо1</Info>
                </Item>
                <Item>
                        <Name>имя2</Name>
                        <Info>инфо2</Info>
                </Item>
        </Objects>
</Config>

Можете привести пример парсинга дочерних узлов. Прочитал только что статью Дембицкого, но на практике пока ничего не получилось, в поиске нашел примеры с братскими узлами и то кривовато оформленными, может я плохо ищу? :boredom:

iNils 28.06.2007 17:45

Парсинг ... что именно вы хотите?

VoCz 28.06.2007 17:46

получить все значения айтимов name и info во flash.

iNils 28.06.2007 18:01

Код:

var xml:XML = new XML ('<?xml version="1.0" encoding="utf-8" ?><Config>        <Head>Основной текст</Head><TableHeadline><Name>имя</Name><Info>инфо</Info></TableHeadline><Objects><Item><Name>имя1</Name><Info>инфо1</Info></Item><Item><Name>имя2</Name><Info>инфо2</Info></Item></Objects></Config>');
xml.ignoreWhite = true;
function parse (node:XMLNode) {
        var name:String = node.nodeName.toLowerCase ();
        if (name == "name" || name == "info") {
                trace (node.nodeName + ":" + node.firstChild.nodeValue);
        }
        if (node.hasChildNodes () || node.childNodes.length != 0) {
                var j:Number = 0;
                while (node.childNodes[j]) {
                        parse (node.childNodes[j++]);
                }
        }
}
parse (xml);


regman 11.01.2011 17:10

у меня уже голова кругом идет от этого парсинга. Нигде толком ниче не могу найти. Итого имеется загружаемый descr.xml:
Код:

<?xml version="1.0" encoding="unicode"?>
<gallery>
    <picture file="001_SummerCamp2006/P1010801.JPG" name="1"/>
    <picture file="001_SummerCamp2006/P1010804.JPG" name="2"/>
    <picture file="001_SummerCamp2006/P1010823.JPG" name="3"/>
    <picture file="001_SummerCamp2006/P1010860.JPG" name="4"/>
    <picture file="001_SummerCamp2006/P1010876.JPG" name="5"/>
</gallery>

мне нужно в поле Display динамического текста вывести name, тоесть описание файла. Если можно - короткий алгоритм всей этой процедуры вывода нужной информации, а то в голове просто не могу связать все воедино.
Начало такое:
Код AS1/AS2:

myXML = new XML();
myXML.ignoreWhite = true;
myXML.load("descr.xml");

Что конкретно делает функция parseXML если на пальцах разьяснить??

mooncar 11.01.2011 17:21

Вот вам решение для вашего конфига, если поля находятся на _root и именуются Display1, Display2 ... :
Код AS1/AS2:

var xmlData:XML = new XML();
xmlData.ignoreWhite = true;
xmlData.onLoad = loadXML;
xmlData.load('descr.xml');
 
function loadXML (success:Boolean)
{       
        if (success)
        {
                var node:XMLNode = this.firstChild ;
                var total:Number = node.childNodes.length ;       
                for( i = 0; i < total; i++)
                {
                        var fName:String = node.childNodes[i].attributes['name'];                       
                        trace(fName); //выведет 1, 2, 3, 4, 5
                        _root['Display' + i].text = fName;
                }
        }
}


regman 11.01.2011 17:31

Спасибо за пример. Вроде все понял. Только вот матчасть у меня хромает.

Вычитал насчет XML.onLoad() : К моменту вызова события onLoad полученные данные уже разобраны методом parseXML и помещены в тело экземпляра XML. Тоесть походу parseXML автоматом парсит файл?? Не нужно его вызывать потом нигде?? И в какой момент именно вызывается этот parseXML?? В момент вызова load?

И еще вопрос походу матчасти. Почему вызов функции loadXML идет раньше ее объявления??

Я просто пробую создать свою первую галерею на сайте без слайдшоу. Есть контейнер, с двумя кнопками (вперед, назад) и текстовое поле для вывода информации и фото (Display). Сейчас уже все работает, только не мог вывести описание файла.

mooncar 11.01.2011 17:41

По поводу второго - вызов функции не идет раньше ее определения.
Все действия кода идут последовательно, все функции к тому времени уже определены (которые записаны так, как в моем примере). Просто для удобства я обычно все функции записываю внизу.

А насчет метода parseXML - я им не пользуюсь, точно не скажу. Насколько я понимаю, метод предназначен для превращения строки в объект XML.

И еще. Вот цитата из переведенного хелпа по AS2:
Цитата:

XML.onLoad
...
Обработчик события; вызывается Flash Player, когда XML документ получен с сервера.

regman 11.01.2011 18:08

У меня стоит задача вывести описание файла name на изображение, загружаемое по пути file, взятому из загруженного файла xml при запуске флэша. А также при каждом переходе к следующей/предыдущей фотографии.

Завтра с утра со свежей головой попробую через ваш пример сделать требуемое...

mooncar 11.01.2011 18:13

Совет. Заносите при парсинге полученные данные в заранее объявленный массив (или массивы), чтобы потом можно из было оттуда брать при смене слайда.


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

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