Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 17.01.2017, 22:52
0l3 вне форума Посмотреть профиль Отправить личное сообщение для 0l3 Найти все сообщения от 0l3
  № 1  
Ответить с цитированием
0l3
 
Аватар для 0l3

Регистрация: Oct 2015
Сообщений: 32
По умолчанию Помогите с xml

Привет братство. Первый раз пытаюсь создать xml-структуру на as3 и не получается..=/
Вот код..
Код 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);
.. который создает это..
Код:
<TEST>
  <lvl1>
    <lvl2/>
    <lvl2/>
  </lvl1>
  <lvl1 a="1"/>
  <lvl1 a="2"/>
</TEST>
Проблема в том, что не получается добавить <lvl2> после каждого <lvl1>.. Первый добавляет, на втором кидает ошибку #1086.. как я не пытался, ну воще не идет.. помогите побороть =)

Старый 17.01.2017, 23:09
ZackMercury вне форума Посмотреть профиль Отправить личное сообщение для ZackMercury Найти все сообщения от ZackMercury
  № 2  
Ответить с цитированием
ZackMercury
 
Аватар для ZackMercury

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,922
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
Код AS3:
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);
Код:
<TEST>
  <lvl1>
    <lvl2/>
    <lvl2/>
  </lvl1>
  <lvl1 a="1"/>
  <lvl2/>
  <lvl1 a="2"/>
  <lvl2/>
</TEST>
__________________
There is no thing in this world that is not simple.

Старый 17.01.2017, 23:13
0l3 вне форума Посмотреть профиль Отправить личное сообщение для 0l3 Найти все сообщения от 0l3
  № 3  
Ответить с цитированием
0l3
 
Аватар для 0l3

Регистрация: Oct 2015
Сообщений: 32
тут не правильно написал..
Цитата:
не получается добавить <lvl2> после каждого <lvl1>
<lvl2> должен быть вложен в <lvl1> как в первых строках.

Старый 17.01.2017, 23:26
ZackMercury вне форума Посмотреть профиль Отправить личное сообщение для ZackMercury Найти все сообщения от ZackMercury
  № 4  
Ответить с цитированием
ZackMercury
 
Аватар для ZackMercury

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,922
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
Код 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[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>
http://help.adobe.com/ru_RU/FlashPla...3/XMLList.html
__________________
There is no thing in this world that is not simple.

Старый 17.01.2017, 23:33
0l3 вне форума Посмотреть профиль Отправить личное сообщение для 0l3 Найти все сообщения от 0l3
  № 5  
Ответить с цитированием
0l3
 
Аватар для 0l3

Регистрация: Oct 2015
Сообщений: 32
Маны - это первое куда я полез за ответами, но до меня не дошло в чем была ошибка..=) Ведь на момент добавления субноды <lvl2> родитель <lvl1> уже существовал..
.. получается строкой xml.lvl1[xml.lvl1.length()-1] мы добавляем <lvl2> к последнему <lvl1> в дереве.. без этого мы лепим <lvl2> к последнему закрывающему тегу </lvl1>, который неявно представлен как /> или как?


Последний раз редактировалось 0l3; 17.01.2017 в 23:50.
Старый 17.01.2017, 23:47
ZackMercury вне форума Посмотреть профиль Отправить личное сообщение для ZackMercury Найти все сообщения от ZackMercury
  № 6  
Ответить с цитированием
ZackMercury
 
Аватар для ZackMercury

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,922
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
Цитата:
Если вы попытаетесь использовать методы класса XML в отношении объекта XMLList, содержащего более одного объекта XML, возникнет исключение. Вместо этого следует выполнить итерацию в коллекции XMLList (например, с помощью оператора for each..in) и применить эти методы к каждому объекту XML в коллекции.
Цитата:
.. если я правильно понимаю, то строкой xml.lvl1[xml.lvl1.length()-1] мы добавляем <lvl2> к последнему <lvl1> в дереве.. без этого мы лепим <lvl2> к последнему закрывающему тегу </lvl1>, который неявно представлен как /> ???
В DOM нет открывающих и закрывающих тегов, есть объект, внутри него дети, а у объекта - атрибуты.
Тоесть, закрывающие и открывающие теги добавляются при преобразовании 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.

Старый 18.01.2017, 00:00
0l3 вне форума Посмотреть профиль Отправить личное сообщение для 0l3 Найти все сообщения от 0l3
  № 7  
Ответить с цитированием
0l3
 
Аватар для 0l3

Регистрация: Oct 2015
Сообщений: 32
Это капец какой-то.. пол-дня псу под хвост из-за того, что в один прекрасный момент xml превратился в xmllist и я по незнанию должен был это вовремя заметить... почему флеш сам не сделает свои нужные "итерации в коллекции" так чтобы я об этом не знал и выдаст то, что хочу я =)) Боже дай мне сил побороть эту гору as3-подводных камней.. куда ни ткнись - бетонная плита.. пока все сложно.. =/
Спасибо за решение, буду пилить дальше.

Старый 18.01.2017, 00:03
ZackMercury вне форума Посмотреть профиль Отправить личное сообщение для ZackMercury Найти все сообщения от ZackMercury
  № 8  
Ответить с цитированием
ZackMercury
 
Аватар для ZackMercury

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,922
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
А чего хотите вы? У вас проблемы с логикой в коде, флеш не причём.
Код 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);
Можно вручную указывать, какой именно
Код 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[1].appendChild(<lvl2 />); //какой это будет элемент lvl1 из двух?
xml.appendChild(<lvl1 a="2" />);
xml.lvl1[2].appendChild(<lvl2 />); //а это - какой lvl1 из трёх?
 
trace(xml);
Про итерацию в коллекции вы что-то не так поняли.

Также можно обращаться по атрибуту a, но для этого все элементы должны содержать этот атрибут:
Код AS3:
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.
Старый 18.01.2017, 00:19
0l3 вне форума Посмотреть профиль Отправить личное сообщение для 0l3 Найти все сообщения от 0l3
  № 9  
Ответить с цитированием
0l3
 
Аватар для 0l3

Регистрация: Oct 2015
Сообщений: 32
В мане написано appendChild добавляет ноду в конец дерева.. это наверно и сбило меня с толку.. хочет добавляет, а хочет не добавляет объясняя это появлением других сущностей.. зачем все так сложно. Если я уже создал xml и наполняю его нодами, зачем меня тыкать в xmllist или другую хрень о которой я не знаю.. это тоже самое что поднять крышку унитаза на ракете а не на унитазе перед тем как на него сесть.. почему я должен знать что крышка доступа к унитазу который находится в моей ванной на самом деле находится на ракете что на мысе Канаверал.

Старый 18.01.2017, 00:24
ZackMercury вне форума Посмотреть профиль Отправить личное сообщение для ZackMercury Найти все сообщения от ZackMercury
  № 10  
Ответить с цитированием
ZackMercury
 
Аватар для ZackMercury

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,922
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
Вы запутались. appendChild действительно добавляет ноду в конец дерева. Откуда XMLList знать, в какую конкретно ноду вы хотите добавить ребёнка, если таких нод несколько?
Я думаю, запутало вас то, что вы можете обращаться к XMLList как к XML, если элемент один. Это действительно немного сбивает с толку.
__________________
There is no thing in this world that is not simple.

Создать новую тему Ответ Часовой пояс GMT +4, время: 13:57.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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