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

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

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

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,918
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
По умолчанию Обращение к элементам XML

representation.xml
Код:
<?xml version="1.0" encoding="UTF-8" ?>
<representation>
	<circle></circle>
	<shape>
		<point id="1"/>
		<point id="2"/>
	</shape>
	<line></line>
</representation>
Код AS3:
private function representationFileLoaded(e:Event):void 
{
	this._representation = XML(this._urlLoader.data);
	for each (var property:XML in this._representation) 
	{ 
		trace(property);  
	} 
}
->


Код AS3:
private function representationFileLoaded(e:Event):void 
{
	this._representation = XML(this._urlLoader.data);
	trace(this._representation.representation);
}
->


Код AS3:
private function representationFileLoaded(e:Event):void 
{
	this._representation = XML(this._urlLoader.data);
	trace(this._representation.circle);
}
->


Код AS3:
private function representationFileLoaded(e:Event):void 
{
	this._representation = XML(this._urlLoader.data);
	trace(this._representation..representation);
}
->




Как мне обращаться к отдельным элементам иерархии, если не так?
Мне нужно пройтись по детям representation, чтобы создать экземпляры соответствующих классов.
__________________
There is no thing in this world that is not simple.


Последний раз редактировалось ZackMercury; 18.11.2016 в 17:18.
Старый 18.11.2016, 19:04
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 2  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
1) <representation/> это корневой тэг XML, то есть сам XML. У него нет свойства (вложенной ноды) .representation — он сам и есть эта нода.
То есть <representation/> это this._representation;
2) Нода <circle></circle> пустая, какого вывода Вы ожидаете? Обращение правильное, хотя противоречит логике попыток выше)))
3) Обращение через две точки означает (грубо говоря) "искать на всех уровнях вложенности". В случае с <representation/> оно никак не поможет)) Вот если нужно обратиться к свойствам шейпа то да: trace(this._representation..point[0].@id);
__________________
Reality.getBounds(this);


Последний раз редактировалось Wolsh; 18.11.2016 в 19:15.
Старый 18.11.2016, 19:40
ZackMercury вне форума Посмотреть профиль Отправить личное сообщение для ZackMercury Найти все сообщения от ZackMercury
  № 3  
Ответить с цитированием
ZackMercury
 
Аватар для ZackMercury

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,918
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
А разве если это корневой тег XML, то, имея несколько детей, тег не должен быть XMLList?

Цитата:
2) Нода <circle></circle> пустая, какого вывода Вы ожидаете? Обращение правильное, хотя противоречит логике попыток выше)))
При выводе всего XML, оно выводит весь код XML, включая корневой тег, значит, следуя логике, при обращении к ребёнку, оно должно вывести не его содержимое, а конкретно тег+содержимое.

Да, действительно, вот так выводится "1"
Код AS3:
private function representationFileLoaded(e:Event):void 
{
	this._representation = XML(this._urlLoader.data);
	trace(this._representation.shape.point[0].@id);   
}
Спасибо.
А как пройтись по детям корневого элемента, попытка, взятая из примера в документации, которая идёт первым делом в шапке выводит почему-то весь документ?
Решил используя метод children(). Извиняюсь, хреново просмотрел документацию.
__________________
There is no thing in this world that is not simple.


Последний раз редактировалось ZackMercury; 18.11.2016 в 21:57.
Старый 19.11.2016, 00:45
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 4  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Цитата:
Сообщение от ZackMercury Посмотреть сообщение
А разве если это корневой тег XML, то, имея несколько детей, тег не должен быть XMLList?
XMLList это Коллекция, то есть простой Список, в котором не предполагается отношение элементов списка как Родитель-Ребенок. У самих элементов списка конечно могут быть свои дети, а так же в принципе возможно, что какой-то элемент окажется ребенком или парентом другого элемента в этом списке, но это их отношения, пришедшие ИЗВНЕ списка. В самом списке все элементы "равноуровневые".
__________________
Reality.getBounds(this);

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

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,918
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
Тоесть XMLList ведёт себя лишь как список, и ничего кроме, а XML является текстом с набором методов для удобной его обработки. XMLList может быть в виде XML в любом случае, а вот XML не всегда может быть XMLList, верно?

Или нет. XML это просто иерархическая DOM-модель документа, а не просто текст. Но технически XMLList может быть XML, но не наоборот?
__________________
There is no thing in this world that is not simple.

Старый 19.11.2016, 01:05
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 6  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Цитата:
Сообщение от ZackMercury Посмотреть сообщение
При выводе всего XML, оно выводит весь код XML, включая корневой тег, значит, следуя логике, при обращении к ребёнку, оно должно вывести не его содержимое, а конкретно тег+содержимое.
Во-первых, неправда. Пустой не выводит)
Код AS3:
			var xmlPro:XML = 
			<processes></processes>;
			trace("XML:", xmlPro); // Выводит: "XML:"
Во-вторых, надо различать, когда Вы обращаетесь к ноде, а когда — к ее содержимому, или значению.
Если нода имеет сложное содержимое (вложенные ноды), то Вы обращаетесь непосредственно к объекту XML:
Код AS3:
			var xmlPro:XML = 
			<processes><circle/></processes>;
			trace("XML:", xmlPro); // Выводит: "XML: <processes><circle/></processes>"
Если нода имеет простое содержимое, то Вы обращаетесь к содержимому:
Код AS3:
			var xmlPro:XML = 
			<processes>2</processes>;
			trace("XML:", xmlPro); // Выводит: "XML: 2"
Советую также при трейсе XML использовать метод .toXMLString()

Добавлено через 7 минут
Цитата:
Но технически XMLList может быть XML, но не наоборот?
Когда XMLList содержит только одну ноду XML, с ним можно работать как с XML. Честно говоря, от этого больше неразберихи, чем пользы((
Коротко говоря, XML подразумевает иерархию и вложенность, а XMLList — линейность, один уровень иерархии. В каком-то смысле это просто одномерный Vector.<XML>.

Добавлено через 11 минут
Также не стоит забывать, что XMLList содержит ССЫЛКИ на ноды исходного XML, а не копии этих нод.
__________________
Reality.getBounds(this);

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

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,918
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
Цитата:
Сообщение от Wolsh Посмотреть сообщение
Во-первых, неправда. Пустой не выводит)
Код AS3:
			var xmlPro:XML = 
			<processes></processes>;
			trace("XML:", xmlPro); // Выводит: "XML:"
Во-вторых, надо различать, когда Вы обращаетесь к ноде, а когда — к ее содержимому, или значению.
Если нода имеет сложное содержимое (вложенные ноды), то Вы обращаетесь непосредственно к объекту XML:
Код AS3:
			var xmlPro:XML = 
			<processes><circle/></processes>;
			trace("XML:", xmlPro); // Выводит: "XML: <processes><circle/></processes>"
Если нода имеет простое содержимое, то Вы обращаетесь к содержимому:
Код AS3:
			var xmlPro:XML = 
			<processes>2</processes>;
			trace("XML:", xmlPro); // Выводит: "XML: 2"
Советую также при трейсе XML использовать метод .toXMLString()

Добавлено через 7 минут
Когда XMLList содержит только одну ноду XML, с ним можно работать как с XML. Честно говоря, от этого больше неразберихи, чем пользы((
Коротко говоря, XML подразумевает иерархию и вложенность, а XMLList — линейность, один уровень иерархии. В каком-то смысле это просто одномерный Vector.<XML>.

Добавлено через 11 минут
Также не стоит забывать, что XMLList содержит ССЫЛКИ на ноды исходного XML, а не копии этих нод.
Согласитесь, это немного нелогично с точки зрения программиста, который любит однородность в коде. Странно, что у XML toString не равно toXMLString. Было бы удобнее доставать значение тега, допустим, через innerXML или getValue().
Спасибо большое.
__________________
There is no thing in this world that is not simple.

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Цитата:
Согласитесь, это немного нелогично с точки зрения программиста, который любит однородность в коде.
А вот и не соглашусь. Здесь фишка в том, что
1) дочерняя нода является свойством отцовской
2) тип ее значения не предопределен
Это ровно то же самое, как использование Object для хранения набора каких-то свойств. И вот допустим Вы делаете trace(_obj.foo); И если foo это инт, равный 2, то трейс и выдаст 2. А если foo это мувиклип, то... Так понятно?
Соответственно у XML есть методы для определения типа содержимого —
hasComplexContent()
hasSimpleContent()

В качестве подсказки, может пригодится для вашей задачи — чтобы узнать имя ноды, то есть "circle", "line", "shape" в вашем примере, можно использовать такую комбинацию:
_node.name().localName
__________________
Reality.getBounds(this);

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

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,918
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
Спасибо, вы крутой чел
__________________
There is no thing in this world that is not simple.

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

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

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


 


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


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