|
|
|||||
Обращение к элементам XML
representation.xml
<?xml version="1.0" encoding="UTF-8" ?> <representation> <circle></circle> <shape> <point id="1"/> <point id="2"/> </shape> <line></line> </representation> private function representationFileLoaded(e:Event):void { this._representation = XML(this._urlLoader.data); for each (var property:XML in this._representation) { trace(property); } } private function representationFileLoaded(e:Event):void { this._representation = XML(this._urlLoader.data); trace(this._representation.representation); } private function representationFileLoaded(e:Event):void { this._representation = XML(this._urlLoader.data); trace(this._representation.circle); } 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. |
|
|||||
Нуб нубам
модератор форума
Регистрация: 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. |
|
|||||
А разве если это корневой тег XML, то, имея несколько детей, тег не должен быть XMLList?
Цитата:
Да, действительно, вот так выводится "1" 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. |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
XMLList это Коллекция, то есть простой Список, в котором не предполагается отношение элементов списка как Родитель-Ребенок. У самих элементов списка конечно могут быть свои дети, а так же в принципе возможно, что какой-то элемент окажется ребенком или парентом другого элемента в этом списке, но это их отношения, пришедшие ИЗВНЕ списка. В самом списке все элементы "равноуровневые".
__________________
Reality.getBounds(this); |
|
|||||
Тоесть XMLList ведёт себя лишь как список, и ничего кроме, а XML является текстом с набором методов для удобной его обработки. XMLList может быть в виде XML в любом случае, а вот XML не всегда может быть XMLList, верно?
Или нет. XML это просто иерархическая DOM-модель документа, а не просто текст. Но технически XMLList может быть XML, но не наоборот?
__________________
There is no thing in this world that is not simple. |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Цитата:
Во-вторых, надо различать, когда Вы обращаетесь к ноде, а когда — к ее содержимому, или значению. Если нода имеет сложное содержимое (вложенные ноды), то Вы обращаетесь непосредственно к объекту XML: var xmlPro:XML = <processes><circle/></processes>; trace("XML:", xmlPro); // Выводит: "XML: <processes><circle/></processes>" Советую также при трейсе XML использовать метод .toXMLString() Добавлено через 7 минут Цитата:
Коротко говоря, XML подразумевает иерархию и вложенность, а XMLList — линейность, один уровень иерархии. В каком-то смысле это просто одномерный Vector.<XML>. Добавлено через 11 минут Также не стоит забывать, что XMLList содержит ССЫЛКИ на ноды исходного XML, а не копии этих нод.
__________________
Reality.getBounds(this); |
|
|||||
Цитата:
Спасибо большое.
__________________
There is no thing in this world that is not simple. |
|
|||||
Нуб нубам
модератор форума
Регистрация: 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); |
Часовой пояс GMT +4, время: 14:44. |
|
« Предыдущая тема | Следующая тема » |
Опции темы | |
Опции просмотра | |
|
|