![]() |
|
||||||||||
|
|
|
|||||
|
Регистрация: Oct 2015
Сообщений: 32
|
Привет братство. Первый раз пытаюсь создать xml-структуру на as3 и не получается..=/
Вот код.. var xml:XML = new XML(<TEST />); xml.appendChild(<lvl1 />); xml.lvl1.appendChild(<lvl2 />); xml.lvl1.appendChild(<lvl2 />); xml.appendChild(<lvl1 a="1" />); //xml.lvl1.appendChild(<lvl2 />); xml.appendChild(<lvl1 a="2" />); //xml.lvl1.appendChild(<lvl2 />); trace(xml); Проблема в том, что не получается добавить <lvl2> после каждого <lvl1>.. Первый добавляет, на втором кидает ошибку #1086.. как я не пытался, ну воще не идет.. помогите побороть =) |
|
|||||
var xml:XML = new XML(<TEST />); xml.appendChild(<lvl1 />); xml.lvl1.appendChild(<lvl2 />); xml.lvl1.appendChild(<lvl2 />); xml.appendChild(<lvl1 a="1" />); xml.appendChild(<lvl2 />); xml.appendChild(<lvl1 a="2" />); xml.appendChild(<lvl2 />); trace(xml);
__________________
There is no thing in this world that is not simple. |
|
|||||
|
Регистрация: Oct 2015
Сообщений: 32
|
тут не правильно написал..
Цитата:
|
|
|||||
var xml:XML = new XML(<TEST />); xml.appendChild(<lvl1 />); xml.lvl1.appendChild(<lvl2 />); xml.lvl1.appendChild(<lvl2 />); xml.appendChild(<lvl1 a="1" />); xml.lvl1[xml.lvl1.length()-1].appendChild(<lvl2 />); xml.appendChild(<lvl1 a="2" />); xml.lvl1[xml.lvl1.length()-1].appendChild(<lvl2 />); <TEST>
<lvl1>
<lvl2/>
<lvl2/>
</lvl1>
<lvl1 a="1">
<lvl2/>
</lvl1>
<lvl1 a="2">
<lvl2/>
</lvl1>
</TEST>
__________________
There is no thing in this world that is not simple. |
|
|||||
|
Регистрация: Oct 2015
Сообщений: 32
|
Маны - это первое куда я полез за ответами, но до меня не дошло в чем была ошибка..=) Ведь на момент добавления субноды <lvl2> родитель <lvl1> уже существовал..
.. получается строкой xml.lvl1[xml.lvl1.length()-1] мы добавляем <lvl2> к последнему <lvl1> в дереве.. без этого мы лепим <lvl2> к последнему закрывающему тегу </lvl1>, который неявно представлен как /> или как? Последний раз редактировалось 0l3; 17.01.2017 в 23:50. |
|
|||||
|
Цитата:
Цитата:
Тоесть, закрывающие и открывающие теги добавляются при преобразовании XML-DOM-модели в текст. Коротко о том, почему ошибка - у вас в TEST 1 lvl1, вы обращаетесь xml.lvl1.appendChild. Вы добавляете в TEST ещё один lvl1(их теперь 2). Теперь XMLList не знает, к какому объекту вы обращаетесь из двух, и поэтому теперь он является списком, и содержит 2 элемента. При обращении к списку как к XML, он генерирует исключение. __________________ There is no thing in this world that is not simple. |
|
|||||
|
Регистрация: Oct 2015
Сообщений: 32
|
Это капец какой-то.. пол-дня псу под хвост из-за того, что в один прекрасный момент xml превратился в xmllist и я по незнанию должен был это вовремя заметить... почему флеш сам не сделает свои нужные "итерации в коллекции" так чтобы я об этом не знал и выдаст то, что хочу я =)) Боже дай мне сил побороть эту гору as3-подводных камней.. куда ни ткнись - бетонная плита.. пока все сложно.. =/
Спасибо за решение, буду пилить дальше. |
|
|||||
|
А чего хотите вы? У вас проблемы с логикой в коде, флеш не причём.
var xml:XML = new XML(<TEST />); xml.appendChild(<lvl1 />); xml.lvl1.appendChild(<lvl2 />); xml.lvl1.appendChild(<lvl2 />); xml.appendChild(<lvl1 a="1" />); //xml.lvl1.appendChild(<lvl2 />); //какой это будет элемент lvl1 из двух? xml.appendChild(<lvl1 a="2" />); //xml.lvl1.appendChild(<lvl2 />); //а это - какой lvl1 из трёх? trace(xml); var xml:XML = new XML(<TEST />); xml.appendChild(<lvl1 />); xml.lvl1.appendChild(<lvl2 />); xml.lvl1.appendChild(<lvl2 />); xml.appendChild(<lvl1 a="1" />); xml.lvl1[1].appendChild(<lvl2 />); //какой это будет элемент lvl1 из двух? xml.appendChild(<lvl1 a="2" />); xml.lvl1[2].appendChild(<lvl2 />); //а это - какой lvl1 из трёх? trace(xml); Также можно обращаться по атрибуту a, но для этого все элементы должны содержать этот атрибут: var xml:XML = new XML(<TEST />); xml.appendChild(<lvl1 a="0" />); xml.lvl1.appendChild(<lvl2 />); xml.lvl1.appendChild(<lvl2 />); xml.appendChild(<lvl1 a="1" />); xml.lvl1.(@a == 1).appendChild(<lvl2 />); xml.appendChild(<lvl1 a="2" />); xml.lvl1.(@a == 2).appendChild(<lvl2 />); trace(xml);
__________________
There is no thing in this world that is not simple. Последний раз редактировалось ZackMercury; 18.01.2017 в 00:20. |
|
|||||
|
Регистрация: Oct 2015
Сообщений: 32
|
В мане написано appendChild добавляет ноду в конец дерева.. это наверно и сбило меня с толку.. хочет добавляет, а хочет не добавляет объясняя это появлением других сущностей.. зачем все так сложно. Если я уже создал xml и наполняю его нодами, зачем меня тыкать в xmllist или другую хрень о которой я не знаю.. это тоже самое что поднять крышку унитаза на ракете а не на унитазе перед тем как на него сесть.. почему я должен знать что крышка доступа к унитазу который находится в моей ванной на самом деле находится на ракете что на мысе Канаверал.
|
|
|||||
|
Вы запутались. appendChild действительно добавляет ноду в конец дерева. Откуда XMLList знать, в какую конкретно ноду вы хотите добавить ребёнка, если таких нод несколько?
Я думаю, запутало вас то, что вы можете обращаться к XMLList как к XML, если элемент один. Это действительно немного сбивает с толку.
__________________
There is no thing in this world that is not simple. |
![]() |
![]() |
Часовой пояс GMT +4, время: 00:05. |
|
|
« Предыдущая тема | Следующая тема » |
|
|