|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Jun 2002
Адрес: Zenkov
Сообщений: 8
|
Научите сделать рекурсию по данным импортированных с xml файла
Есть файл, приблизительно:
<?xml version="1.0" encoding="Windows-1251"?> <menu_list> <restoraund> <menu_element>data</menu_element> <menu_element>data</menu_element> <menu_element>data</menu_element> <menu_element>data</menu_element> ... </restoraund> <magaziund> <podmenu_element> <menu_element>data</menu_element> <menu_element>data</menu_element> <menu_element>data</menu_element> ... </podmenu_element> <menu_element>data</menu_element> <menu_element>data</menu_element> <menu_element>data</menu_element> ... </magaziund> </menu_list> Как вывести командой trace() все значения? Буду очень благодарин, тому кто поможет. |
|
|||||
Регистрация: Jun 2002
Адрес: Zenkov
Сообщений: 8
|
Вот переписываю из учебника функцию рекурсии obhod(), подсчитывающую количество узлов в документе.
Она получает ссылку на узел и увеличивает значение переменной-счетчика на единицу. Затем она проверяет, есть ли у узла дочерние узлы. Если они есть, то создается еще одна активация функции и ей передается ссылка на первый дочерний узел. Далее функция проверяет, имеется ли узел, который был бы прописан после данного. Если он обнаруживается, то ссылка на него передается новой активации obhod(). var myXML:XML=new XML("<text><t1/><data>привет</data><t3/></text>"); var col:Number=0; function obhod(node:XMLNode):Void { col++; if (node.hasChildNodes()) { obhod(node.firstChild); } if (node.nextSibling != null) { obhod(node.nextSibling); } } obhod(myXML.firstChild); trace(col); //Выводит 5 var myXML = new XML(); myXML.load("myxml.xml"); var col:Number=0; myXML.onLoad = function() { function obhod(node:XMLNode):Void { col++; if (node.hasChildNodes()) { obhod(node.firstChild); } if (node.nextSibling != null) { obhod(node.nextSibling); } } obhod(myXML.firstChild); trace(col); //Выводит 0 ЧТО НЕ ПРАВИЛЬНО } <LES> <dub> <vetochka1> <listik1/> <listik2/> <listik3/> </vetochka1> <vetochka2/> <duplo vduple="meda polno"/> </dub> <sosna> <krona> <igolka1/> <igolka2/> <igolka100/> </krona> </sosna> <lipa> <vetochka1 pochka="4"/> <vetochka2 pochka="10"/> <vetochka3 pochka="0"/> </lipa> <kamen oblom="у него есть остаток какого-то хрена"/> </LES> Последний раз редактировалось Onic; 23.11.2004 в 16:05. |
|
|||||
Регистрация: Jun 2002
Адрес: Zenkov
Сообщений: 8
|
Я уже попробовал ради интереса в файл myxml.xml вписать <text><t1/><data>привет</data><t3/></text>, но результат остался тот же, колличество узлов = 0.
|
|
|||||
Регистрация: Jun 2002
Адрес: Zenkov
Сообщений: 8
|
Вот модифицировал код. Хотел получить значения нодов.
var myXML:XML = new XML("<text><t1/><data2>привет</data2><t3/><t4/> <data5>привет5</data5><t6/> <data7><m1>YO!</m1></data7><t8/> <data9><m2><mv>UPS!</mv></m2></data9><t10/></text>"); var col:Number = 0; // счетчик, выдает колличество узлов в данных (18 в данном случае) function obhod(node:XMLNode):Void { col++; if (node.hasChildNodes()) { //trace(node.firstChild); obhod(node.firstChild); } if (node.nextSibling != null) { //trace(node.nextSibling); //trace(node.nextSibling.nodeName); //trace(node.nextSibling.nodeValue); if (node.firstChild != null) { trace(node.firstChild); //выводит содержание нода в окно Output } obhod(node.nextSibling); } } obhod(myXML.firstChild); trace(col); /* поскольку счетчик считает все узлы (любой вложенности), значит он полностью обходит дерево и можно узнать колличество вложений. Не получается все же вывести ЛЮБЫЕ вложения, выводит ноды (<m1>YO!</m1>). */ Но ВСЕ РАВНО не работает, если данные грузятса из внешнего myxml.xml, даже если они в нем едентичны. Уже не знаю что делать. Как только не пытался Я плякать Последний раз редактировалось Onic; 23.11.2004 в 17:40. |
|
|||||
Guest
Сообщений: n/a
|
количество подузлов мона получить через childNodes.length
Обход дерева: function GetTree(node) { if (node.childNodes.length!=0) { for (var i=0;i<node.childNodes.length;i++) { if (node.childNodes[i].nodeValue!=undefined) { trace(node.childNodes[i].nodeName); trace(node.childNodes[i].nodeValue); } GetTree(node.childNodes[i]); } } } doc = new XML(); doc.load('data.xml'); doc.onLoad = function() { GetTree(doc.firstChild); } |
|
|||||
Регистрация: Jun 2002
Адрес: Zenkov
Сообщений: 8
|
не получилось. потому что
trace(childNodes.length); выводит 0 хотя в ListVariables Level #0: Variable _level0.$version = "WIN 7,0,19,0" Variable _level0.GetTree = [function 'GetTree'] Variable _level0.doc = [object #2] { <LES> <dub> <vetochka1> <listik1 /> <listik2 /> <listik3 /> </vetochka1> <vetochka2 /> <duplo vduple="meda polno" /> </dub> <sosna> <krona> <igolka1 /> <igolka2 /> <igolka100 /> </krona> </sosna> <lipa> <vetochka1 pochka="4" /> <vetochka2 pochka="10" /> <vetochka3 pochka="0" /> </lipa> <kamen oblom="у него есть остаток какого-то хрена, наверно девки, что на речку бегали да поотломали для забавы" /> </LES> } |
|
|||||
Регистрация: Dec 2002
Адрес: Сочи
Сообщений: 2,819
|
|
Часовой пояс GMT +4, время: 20:49. |
|
« Предыдущая тема | Следующая тема » |
|
|