Форум 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, структура которого неизвестна. (http://www.flasher.ru/forum/showthread.php?t=97709)

Torero 27.06.2007 19:19

Анализ элементов XML, структура которого неизвестна.
 
Добрый день. Начал изучать работу с XML и нарвался на проблемку..
Допустим, есть XML-объект
Код:

xm=new XML("<u><t><d><bi h='12'>Some Text</bi></d><bi h='16'>Some Text</bi></t></u>")
и я хочу заменить <bi h='xx'></bi> на <font size='xx'><b><i> </b></i></font>.
Относительно использования insertBefore, insertAfter, attributes, вопросов, вроде-бы, нет, но как перебрать элементы XML не зная его структуры?

BigDan 27.06.2007 19:27

while+XML.hasChildNodes()+XML.childNodes

Kikasso 27.06.2007 19:49

+ рекурсия

Torero 28.06.2007 01:33

Пипл, хелп - не получается. Кучу вариантов перебрал.
Самый жизнесособный:
В цикле спуститься на нижний уровень каждой ветви (.hasChildNodes=false), поштучно скопировать объекты с нижнего уровня + их родителя в другой XML, попутно их проанализировав, вернуться в цикле на предыдущий уровень. Цикл заканчивался-бы после того, как все элементы XML перекочевали в другой.
В чем запарка: есть appendChild, но не нашел ничего наподобие appendParent - не получается копировать элементы, начиная с нижних уровней.
В чем вопрос: как в XML добавить родительский элемент? Если никак, то вокруг чего зацикливать? - у нас нет даже общего количества элементов.

Люди, оч.прошу, помогите пожалуйста найти ошибку - уже 3 часа парюсь...((((

Код:

private function test():Void{
        var s:String;                        var aNode:XMLNode;
        var i:Number;                        i=0;
        var k:Boolean;                        k=false;
        s="<person><name>Dmitry<initials>D.</initials><length>6</length></name><age>24<birthday>1.01.2000</birthday></age></person>";
        s+="<password><val>asdf</val><expire>12.07.2007</expire></password>";
        s+="<mood><average>good</average><now>so-so</now></mood>"; //!!!!!!!!!!!!!!!!!!!! :(
        xm_new=new XML();                xm=new XML(s);
        xm_new=xm;                                aNode=xm.childNodes[0];
        while(xm.childNodes.length>0){
                k=false; i=0;
                while (k<>true){ //проверяем все элементы
                        if(aNode.childNodes[i].hasChildNodes()){//на наличие следующего уровня
                                aNode=aNode.childNodes[i]; // и переходим к нему..
                                i=-1;
                        }
                        i++;
                        if (i>aNode.childNodes.length-1){k=true;}
                }
//спустившись на нижний уровень ветки, выдергиваю все элементы и обнуляю их.
                aNode=aNode.parentNode;
                for (var i:Number =0; i<aNode.childNodes.length; i++){
                        if (aNode.childNodes[i].nodeName<>null){
                                trace(aNode.childNodes[i]+"+"+aNode.childNodes[i].nodeName);
                                aNode.childNodes[i].removeNode();
                        }
                }
        }
}

Данный код раскладывает почти весь XML на элементы. Проблема в "почти". Восклицательными знаками выделил проблемный участок.

Kikasso 28.06.2007 22:48

Цитата:

и я хочу заменить <bi h='xx'></bi> на <font size='xx'><b><i> </b></i></font>.
А зачем вообще заменять? Не проще bi в css описать?

Torero 29.06.2007 08:04

Смог разложить XML.

А насчет css:
знаком я с ним поверхностно. "<bi>TEXT</bi>" сделать равным "<b><i>TEXT</b></i>" - не проблема.
1.но как выдернуть из тэга аттрибут?
напр: как "<bi h='20'>TEXT</bi>" сделать равным "<font size='20'><b><i>TEXT</b></i></font>" ??
2.можно-ли средствами css указать на необходимость вставить текст? напр.если я хочу чтобы перед каждым элементом, заключенным в тэги <b></b> появлялось слово "жирным:". т.е. <b>TEXT</b> при выводе на экран выглядел следующим образом: "жирным:TEXT"

Kikasso 29.06.2007 10:58

Torero, не знаю как в нормальном, во флешовом css нельзя конечно.
С аттрибутом: можно подумать, сколько размеров peально будет востребовано и столько наделать тегов ( bi16, bi20 например ).
Хотя разложить xml - хорошее упражнение в любом случае.

Torero 29.06.2007 15:43

Спасибо за помощь. Топик закрыт.


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

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