![]() |
|
||||||||||
|
|||||
|
Регистрация: Aug 2003
Адрес: Екатеринбург
Сообщений: 1
|
Ребята помогите, застрял на одном месте.
Купил книгу "Flash MX ActionScript" авт.Роберт Рейнхард, Джой Лот решил вплотную освоить Flash и книга то неплохая да вот только мозги уже пухнут от того что эту проблему неполучается никак решить, я весь раздел в книге перевернул, ни х...на не могу сделать (конечно я новичок в этом Flasher'ском деле, поэтому прошу помочь что бы двинуться дальше) Суть проблемы: Как прочитать все дерево в XML c помощью цикла или функции. Как сделать это пошагово я знаю т.е. обращаешься сначала к одному ноду достаешь из него все вложенные ноды, потом перходишь к другому ноду. Вот моя XML: <tovar title="Товар"> <name type="Тип" marka="Марка"> <model chushka="Модель" price="195.30" col="0" /> </name> <name type="Тип" marka="Марка"> <model chushka="Модель" price="186.60" col="0" /> <model chushka="Модель" price="180.30" col="10" /> </name> <name type="Тип" marka="Марка"> <model chushka="Модель" price="181.20" col="0" /> <model chushka="Модель" price="44.70" col="0" / <model chushka="Чушка" price="30.00" col="0" /> </name> ..... </tovar> Скрипт: _root.createTextField("name",1,0,0,600,600); myXML = new XML(); myXML.ignoreWhite = true; myXML = new XML ('Данные XML'); tovar = myXML.firstChild; model = tovar.firstChild; title = tovar.attributes.title; for (i=0; i<tovar.childNodes.length; i++) { name1 = tovar.childNodes[i].nodeName; type = tovar.childNodes[i].attributes.type; marka = tovar.childNodes[i].attributes.marka; for (b=0; b<model.childNodes.length; b++) { sibling = model.childNodes[b].attributes.chushka; sibling2 = model.childNodes[b].attributes.price; sibling3 = model.childNodes[b].attributes.col; } name.text+=(title+name1+"\t"+type+"\t"+marka+"\t"+sibling+"\t"+sibling2+"\t"+sibling3+"\n"); } тестирование: Товарname Тип Марка Модель 195.30 0 Товарname Тип Марка Модель 195.30 0 Товарname Тип Марка Модель 195.30 0 Вот проблема моя видно наглядно. Начинающий foleg
__________________
foleg |
|
|||||
|
Регистрация: Oct 2003
Адрес: Ёбург
Сообщений: 145
|
Сам когда-то задался этим вопросом. Здесь в исходниках лежит несколько примеров по XML, в одном из них - прекрасный вариант обхода всего дерева. суть в том, что создается рекурсивная функция, которая вызывает сама себя, если встречается потомок или сиблинг. а в качестве параметра принимает собсно потомка (и всю его ветвь), или сиблинга
вот пример: function findTextElements() { xmel=this; while (xmel != null) { // это блок разбора if (xmel.nodeName == "header") { header += xmel.childNodes[0].nodeValue; } if (xmel.nodeName == "text") { txt += xmel.childNodes[0].nodeValue; } if (xmel.firstChild != null) { xmel = xmel.firstChild; } else { if (xmel.nextSibling != null) { xmel = xmel.nextSibling; } else { xmel = xmel.parentNode; xmel = xmel.nextSibling; } } } //тут можно вставить какое-нить действие, которое сработает по завершении разбора } Эту функцию запускаешь, а в качестве параметра - кидаешь свои данные. Если что - пиши. есть и другие варианты разбора хмл.
__________________
Ботва всё это |
![]() |
Часовой пояс GMT +4, время: 21:59. |
|
|
« Предыдущая тема | Следующая тема » |
|
|