Просмотр полной версии : Задачка, связанная с XML
Долго думал, но ничего хорошего в голову не лезет. Вообщем есть XML примерно с такой структурой:
<tag>
<prm />
<prm />
<tag>
<prm />
</tag>
<prm />
<prm />
</tag>
Есть ссылка на выделенный узел. Теперь нужно, имея эту ссылку удалить родительский узел tag и узнать каким по счёту tag был среди дочерних узлов внешнего tag. Удалить узел нет проблем ( _ссылка_.parentNode.removeNode(); ).
А как можно узнать "номер" дочернего узла? Фактически нам надо узнать индекс массива childNodes для внешнего tag. Как это можно сделать?
MINASTIS
26.04.2007, 21:26
Задай tag параметр имя, проверяй циклом на имя все узлы, как найдет - копируй цифру-номер этого узла в переменную, удаляй свой главный узел и трейс ту переменную.
А как можно узнать "номер" дочернего узла? Фактически нам надо узнать индекс массива childNodes для внешнего tag. Как это можно сделать?
Перебрать массив в цикле..
В 8-ке есть еще idMap
Была такая мысль, но немножко не удобно. Сейчас вдумался и это натолкнуло на мысль: можно tag задать параметр с его номером. Наверное будет удобнее.
P.S. MINASTIS спасибо.
2Kikasso
Перебрать массив в цикле..
Когда начнём перебирать и дойдём до нужного tag как мы узнаем, что это и есть нужный (напомню, что у нас есть только ссылка на вложеный <prm>)
В 8-ке есть еще idMap
У меня Flash7
=== this.parentNode может быть. Или задавай, правда, атрибут и сравнивай.
Molecula
26.04.2007, 22:05
2KoLar:
Интересно, а вообще для какой задачи такое надо...может переосмыслить её и придумать иначе?
Использовать параметр id и обращаться по нему.
Molecula
26.04.2007, 22:20
У него же Flash7.
У него же Flash7.
И? Атрибуты-то доступны.
У него же Flash7.
А кто сказал, что в семерке это не работает? Просто нет idMap, ну и что?
2KoLar:
Интересно, а вообще для какой задачи такое надо...может переосмыслить её и придумать иначе?
Иначе нельзя.
Использовать параметр id и обращаться по нему.
Что то я немного не понял, зачем нам id. Обратится к tag мы можем и через parentNode, в этом проблемы нет, а нам нужно узнать номер этого узла.
=== this.parentNode может быть. Или задавай, правда, атрибут и сравнивай.
О сравнении я тоже думал. Только не знаю, сравнит ли Flash два XML правильно. К тому же в этом случае тоже придётся использовать цикл, а лучше бы как-нибудь без него.
Без цикла никак. Лучше по id.
Без цикла никак. Лучше по id.
Если tagу присвоить атрибут с его номером num, то без цикла можно будет обратиться this.parentNode.attributes.num
Про id:
Повторюсь, что я не понимаю, зачем нам id. Обратится к tag мы можем и через parentNode, в этом проблемы нет, а нам нужно узнать номер этого узла. Как здесь нам id то поможет?
объясните, пожалуйста, для чего здесь нужен id. как в этой ситуации он может помочь?
ну если совпадет attributes.id, тогда это мы.
var node = XMLNode(my_xml['idValue']).parentNode;
trace(node);
idValue — значение аттрибута id у нода prm. my_xml — весь наш XML. Код написан под семерку, в восьмерке надо дописать idMap.
idValue — значение аттрибута id у нода prm. my_xml — весь наш XML. Код написан под семерку, в восьмерке надо дописать idMap.
Зачем ставить аттрибут id у prm, ведь надо узнать номер tag? И как зная id мы узнаем номер?
Без цикла никак. Лучше по id.
Почему нельзя? А что так нельзя:
присвоить tag аттрибут с его номером (num), а потом
number = this.parentNode.attributes.num;
Зачем ставить аттрибут id у prm, ведь надо узнать номер tag? И как зная id мы узнаем номер?
А зачем узнавать номер? Номер может быть прямо в id написан.
Всем спасибо за советы!:bb:
В задаче разобрался. Сделал (не без вашей помощи:victory:). Вроде бы пока всё устраивает!:rolleyes:
Ещё раз спасибо!
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.