![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
[+1.4 18.06.07]
Регистрация: May 2007
Адрес: Moscow
Сообщений: 263
|
Добрый день. Начал изучать работу с XML и нарвался на проблемку..
Допустим, есть XML-объект и я хочу заменить <bi h='xx'></bi> на <font size='xx'><b><i> </b></i></font>. Относительно использования insertBefore, insertAfter, attributes, вопросов, вроде-бы, нет, но как перебрать элементы XML не зная его структуры? |
|
|||||
|
while+XML.hasChildNodes()+XML.childNodes
|
|
|||||
|
Регистрация: Oct 2006
Адрес: spb.ru
Сообщений: 3,221
|
+ рекурсия
|
|
|||||
|
[+1.4 18.06.07]
Регистрация: May 2007
Адрес: Moscow
Сообщений: 263
|
Пипл, хелп - не получается. Кучу вариантов перебрал.
Самый жизнесособный: В цикле спуститься на нижний уровень каждой ветви (.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();
}
}
}
}
Последний раз редактировалось iNils; 28.06.2007 в 17:36. |
|
|||||
|
Регистрация: Oct 2006
Адрес: spb.ru
Сообщений: 3,221
|
Цитата:
|
|
|||||
|
[+1.4 18.06.07]
Регистрация: May 2007
Адрес: Moscow
Сообщений: 263
|
Смог разложить 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" Последний раз редактировалось Torero; 29.06.2007 в 08:17. |
|
|||||
|
Регистрация: Oct 2006
Адрес: spb.ru
Сообщений: 3,221
|
Torero, не знаю как в нормальном, во флешовом css нельзя конечно.
С аттрибутом: можно подумать, сколько размеров peально будет востребовано и столько наделать тегов ( bi16, bi20 например ). Хотя разложить xml - хорошее упражнение в любом случае. |
|
|||||
|
[+1.4 18.06.07]
Регистрация: May 2007
Адрес: Moscow
Сообщений: 263
|
Спасибо за помощь. Топик закрыт.
Последний раз редактировалось Torero; 29.06.2007 в 15:51. |
![]() |
![]() |
Часовой пояс GMT +4, время: 05:53. |
|
|
« Предыдущая тема | Следующая тема » |
|
|