Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   XML (http://www.flasher.ru/forum/forumdisplay.php?f=23)
-   -   Уважаемые ПроФи Flasher's помогите! (http://www.flasher.ru/forum/showthread.php?t=53602)

foleg 12.01.2004 13:49

Уважаемые ПроФи Flasher's помогите!
 
Ребята помогите, застрял на одном месте.
Купил книгу "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
Вот проблема моя видно наглядно. :confused:
Начинающий foleg

schleicher 11.02.2004 12:35

Сам когда-то задался этим вопросом. Здесь в исходниках лежит несколько примеров по 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, время: 00:32.

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