PDA

Просмотр полной версии : Задачка, связанная с XML


KoLar
26.04.2007, 21:15
Долго думал, но ничего хорошего в голову не лезет. Вообщем есть XML примерно с такой структурой:

<tag>
<prm />
<prm />
<tag>
<prm />
</tag>
<prm />
<prm />
</tag>

Есть ссылка на выделенный узел. Теперь нужно, имея эту ссылку удалить родительский узел tag и узнать каким по счёту tag был среди дочерних узлов внешнего tag. Удалить узел нет проблем ( _ссылка_.parentNode.removeNode(); ).

А как можно узнать "номер" дочернего узла? Фактически нам надо узнать индекс массива childNodes для внешнего tag. Как это можно сделать?

MINASTIS
26.04.2007, 21:26
Задай tag параметр имя, проверяй циклом на имя все узлы, как найдет - копируй цифру-номер этого узла в переменную, удаляй свой главный узел и трейс ту переменную.

Kikasso
26.04.2007, 21:34
А как можно узнать "номер" дочернего узла? Фактически нам надо узнать индекс массива childNodes для внешнего tag. Как это можно сделать?
Перебрать массив в цикле..
В 8-ке есть еще idMap

KoLar
26.04.2007, 21:39
Была такая мысль, но немножко не удобно. Сейчас вдумался и это натолкнуло на мысль: можно tag задать параметр с его номером. Наверное будет удобнее.

P.S. MINASTIS спасибо.

KoLar
26.04.2007, 21:45
2Kikasso
Перебрать массив в цикле..
Когда начнём перебирать и дойдём до нужного tag как мы узнаем, что это и есть нужный (напомню, что у нас есть только ссылка на вложеный <prm>)

В 8-ке есть еще idMap
У меня Flash7

Kikasso
26.04.2007, 22:00
=== this.parentNode может быть. Или задавай, правда, атрибут и сравнивай.

Molecula
26.04.2007, 22:05
2KoLar:
Интересно, а вообще для какой задачи такое надо...может переосмыслить её и придумать иначе?

etc
26.04.2007, 22:14
Использовать параметр id и обращаться по нему.

Molecula
26.04.2007, 22:20
У него же Flash7.

lowka
26.04.2007, 22:44
У него же Flash7.
И? Атрибуты-то доступны.

etc
27.04.2007, 01:25
У него же Flash7.
А кто сказал, что в семерке это не работает? Просто нет idMap, ну и что?

KoLar
27.04.2007, 07:30
2KoLar:
Интересно, а вообще для какой задачи такое надо...может переосмыслить её и придумать иначе?
Иначе нельзя.
Использовать параметр id и обращаться по нему.
Что то я немного не понял, зачем нам id. Обратится к tag мы можем и через parentNode, в этом проблемы нет, а нам нужно узнать номер этого узла.

KoLar
27.04.2007, 07:37
=== this.parentNode может быть. Или задавай, правда, атрибут и сравнивай.
О сравнении я тоже думал. Только не знаю, сравнит ли Flash два XML правильно. К тому же в этом случае тоже придётся использовать цикл, а лучше бы как-нибудь без него.

Kikasso
27.04.2007, 07:42
Без цикла никак. Лучше по id.

KoLar
27.04.2007, 07:58
Без цикла никак. Лучше по id.
Если tagу присвоить атрибут с его номером num, то без цикла можно будет обратиться this.parentNode.attributes.num

Про id:
Повторюсь, что я не понимаю, зачем нам id. Обратится к tag мы можем и через parentNode, в этом проблемы нет, а нам нужно узнать номер этого узла. Как здесь нам id то поможет?

объясните, пожалуйста, для чего здесь нужен id. как в этой ситуации он может помочь?

Kikasso
27.04.2007, 08:53
ну если совпадет attributes.id, тогда это мы.

etc
27.04.2007, 13:16
var node = XMLNode(my_xml['idValue']).parentNode;
trace(node);
idValue — значение аттрибута id у нода prm. my_xml — весь наш XML. Код написан под семерку, в восьмерке надо дописать idMap.

KoLar
27.04.2007, 18:15
idValue — значение аттрибута id у нода prm. my_xml — весь наш XML. Код написан под семерку, в восьмерке надо дописать idMap.
Зачем ставить аттрибут id у prm, ведь надо узнать номер tag? И как зная id мы узнаем номер?

Без цикла никак. Лучше по id.
Почему нельзя? А что так нельзя:
присвоить tag аттрибут с его номером (num), а потом

number = this.parentNode.attributes.num;

etc
27.04.2007, 21:46
Зачем ставить аттрибут id у prm, ведь надо узнать номер tag? И как зная id мы узнаем номер?
А зачем узнавать номер? Номер может быть прямо в id написан.

KoLar
27.04.2007, 21:57
Всем спасибо за советы!:bb:
В задаче разобрался. Сделал (не без вашей помощи:victory:). Вроде бы пока всё устраивает!:rolleyes:
Ещё раз спасибо!