Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Вопрос про работу с xml деревом. (http://www.flasher.ru/forum/showthread.php?t=69736)

SerrNovik 29.09.2005 15:37

Вопрос про работу с xml деревом.
 
Есть дерево, которое загружается в объект menu_xml, притом оно может меняться:


<demo name="Demo 1">
<folder name="Lesson 1">
<clips>
<clip name="Part 1">part1.swf</clip>
<clip name="Part 2">part2.swf</clip>
<clip name="Part 3">part3.swf</clip>
</clips>
</folder>
<folder name="Lesson 2">
<clips>
<clip name="Part 1">part1.swf</clip>
<clip name="Part 2">part2.swf</clip>
</clips>
</folder>

</demo>


Требуется для дальнейшей работы раскидать его на два массива, один с названиями, другой с именами файлов.

FreeLander 29.09.2005 17:13

Код:

myArray[0]= new Array();
myArray[1]= new Array();
var my_xml:XML = new XML();

my_xml.ignoreWhite = true;
my_xml.xmlDecl = "<?xml version=\"1.0\"?>";
my_xml.onLoad = function(success:Boolean) {
        scanFolder(my_xml.firstChild.firstChild);
        };
scanFolder = function(node_XMLNode){
        var child_xml =new XML;
        child_xml = (node_XMLNode.firstChild.firstChild);
        while (child_xml){
                myArray[0][myArray[0].length]=child_xml.attributes.name;
                myArray[1][myArray[1].length]=child_xml.nodeValue;
                child_xml=child_xml.nextSibling;
                }
        if (node_XMLNode.nextSibling)
                scanFolder(node_XMLNode.nextSibling)
        else{
                trace(myArray[0])
                trace(myArray[1])
                };
        }

my_xml.load("some.xml");

подправьте, братцы: ".nodeValue;" не пашет, хз почему.
грешу на исходные данные.
плохое решение - пихать значения в атрибуты

SerrNovik 29.09.2005 17:56

Спасибо, сейчас попробую применить на практике.

SerrNovik 30.09.2005 13:06

А по поводу ".nodeValue;" Все работает если писать firstChild.nodeValue. Это так, если кого-то вдруг эта проблема тоже будет волновать.

seeker2005 30.09.2005 13:35

Чем плоха практика пихания значений в аттрибуты?

FreeLander 30.09.2005 15:30

Цитата:

Сообщение от SerrNovik
А по поводу ".nodeValue;" Все работает если писать firstChild.nodeValue.

действительно работает, но вроде это не не Child..

Цитата:

Сообщение от seeker2005
Чем плоха практика пихания значений в аттрибуты?

ничем, просто тут они не в аттрибутах

Iv 30.09.2005 15:34

<clip name="Part 1">part1.swf</clip>

- налицо неправильная организация XML.
правильно наоборот:
<clip url="part1.swf">Part 1</clip>
потому что может понадобиться форматирование типа

<clip url="part1.swf"><![CDATA[<font color="#FF0000">Part 1<font>]]></clip>

в то время как part1.swf никогда форматирования не потребует.

далее:
такого рода перегонка из XML в массив НЕ НУЖНА и говорит о том,
что разработчик попросту не умеет работать с XML.

Iv 30.09.2005 15:38

> Чем плоха практика пихания значений в аттрибуты?
1. тем что HTML форматирование атрибутов возможно но затруднительно.
2. длинные тексты в атрибутах ухудшают читабельность XML.

seeker2005 03.10.2005 06:13

Так они на то и аттрибуты, чтобы какую-то дополнительную, но не тяжелую и не требующую дополнительной обработки информацию хранить. XML документ действительно не продуман, но это уже дело практики :p

SerrNovik 03.10.2005 08:55

Я спросил про перегонку в масив, чтобы как раз посмотреть как с xml работать, потому, как по голому хэлпу очень трудно разобраться. Сейчас у меня несколько рекурсивных алгоритмов, которые всесторенное делают из этого xml я меню любой глубины и без использования внешних масивов или чего-бо там небыло...
Что касается написания xml-я то в моем случае не будет меняться ни один из этих парраметров. Единственное что к типу folder я добавил изменяющийся элемент - открыто/закрыто.


Часовой пояс GMT +4, время: 18:04.

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