PDA

Просмотр полной версии : Flex 3b XML -обращение к нодам


SSergeyS
14.09.2007, 15:41
Есть MyXML:XML
при клике в дереве по ее ноду сохраняем нод в переменную curNode = e.currentTarget.selectedItem;
теперь мы хотим удалить из MyXML - curNode.
Как к нему правильно обратится, если мы заранее не знаем глубину вложенности и количество нодов на каждом уровне?

etc
14.09.2007, 15:57
delete curNode;

SSergeyS
14.09.2007, 17:23
а добавить нод?
myXML.cureNone.appendChild();
не получится.
Да и не удаляет он тоже так, пробовал
delete XML.cureNone;
и это не подходит для любой степени вложенности....

Пробовал через параметре в самом ноде – но это огромный костыль!
if((int(curNode.@L)==0)||(int(curNode.@L)==1)||(int(curNode.@L)==-1))
{
var str:String="level"+String(n);
switch(int(n))
{
case 0:
xmlAll.appendChild(<{str} Name={name} L={String(n)} N={String(xmlAll.level0.length())}> </{str}>);
break;
case 1:
xmlAll.level0[curNode.@N].appendChild(<{str} Name={name} L={String(n)} N={String(xmlAll.level1.length())}> </{str}>);
break;
case 2:
xmlAll.level0[curNode.parent().@N].level1[curNode.@N].appendChild(<{str} Name={name} L={String(n)} N={String(xmlAll.level2.length())}> </{str}>);
break;
default :
xmlAll.appendChild(<{str} Name={name} L={String(n)}> </{str}>);
break;
}
View.dataProvider=xmlAll;
}
и это никак не подойдет для большой степени вложености. Помогите плиз решить это нормальным образом....

etc
14.09.2007, 17:47
var xml:XML = <data>
<item><node><![CDATA[text]]></node></item>
<item><![CDATA[text]]></item>
</data>
var node:XMLList = xml.item[0].node;
delete node.parent().node;
trace(xml.toXMLString());
trace('-----------');
xml.item += node;
trace(xml.toXMLString());

SSergeyS
14.09.2007, 18:04
Изящно. Сейчас опробую....
Спасибо.

SSergeyS
14.09.2007, 18:41
Дело в том что XML многоуровневая с не одинаковым количеством нодов. И сами ноды в ней разные вот упрощенно говоря такая:

<data>
<node2 N ="9"></node2>
<node0>
</node0>

<node0>
<node1>
</node1>
<node1>
<node2 N ="1"></node2>
<node1>
</node0
<node0>
<node2 N ="14"></node2>
<node1>
<node2 N ="2"></node2>
<node2 N ="3"></node2>
<node2 N ="4"></node2>
<node2 N ="5"></node2>
</node1>
<node1>
<node2 N ="6"></node2>
<node1>
</node0
</data>

из этой XML строим дерево. По клику но какой-нибуть нод(любого уровня вложенности) мы должны мочь добавит в него новый нод или удалить текущий.
И проблема в основном построить код, который будет грамотно работать с любым нодом на любой глубине дерева.
Тоисть имея текущий нод

curNode=e.currentTarget.selectedItem;

надо определить, где он находится в XML и выполнить с ним какие-нибуть действия. А в предыдущем скрипите мы должны обязательно знать заранее, где нод находится...
xml.item += node;

etc
14.09.2007, 18:47
Зачем знать? curNode известен? Известен. parent() у него есть? Есть. Какие проблемы?

SSergeyS
14.09.2007, 19:20
так в этом и вопрос )))
как именно?
таким образом как :
myXML.cureNone.appendChild(<node5 R="tratata"></node5>);
сделать нельзя...
извини может я не вижу элементарного - но я в конец запутался... потратил на эту задачу пару часов - и все решения кривоваты.... очень хочется изящное и абстрактно е решение но явно не хватает опыта….

etc
14.09.2007, 20:21
curNode.parent() += <node />;

SSergeyS
17.09.2007, 11:00
curNode.parent() += <node/>;
выдает ошибку:
"1105: Target of assignment must be a reference value."

etc
17.09.2007, 11:18
Тогда ставьте трейс на parent() и вперед.