Руководство по actionscript. часть 3, стр. 030
Теперь, когда у нас появилась переменная novel, определенная в листинге 18.2, которая ссылается на фрагмент XML из листинга 18.1, рассмотрим, как можно обращаться к различным частям фрагмента с помощью методик кодирования расширения Е4Х.
Обращение к данным XML
Расширение Е4Х предлагает два основных набора инструментов для обращения к данным в иерархии XML:
? методы обращения к содержимому классов XML и XMLList (attribute ( ), attributes ( ), child ( ), children ( ), comments ( ), descendants ( ), elements ( ), parent ( ), processinglnstructions ( ) и text ( ) );
? обращение в стиле доступа к переменным с помощью операторов «точка» (.), «потомок» (. .) и «атрибут» (@).
Обращение в стиле доступа к переменным предлагается в качестве удобства для программиста и всегда соответствует вызову одного или нескольких методов класса XML или XMLList. Однако эти два подхода не являются полностью взаимозаменяемыми. Для обращения к следующим типам содержимого должен использоваться подходящий метод класса XML или XMLList:
? родитель экземпляра класса XML (обращение через метод parent ( ) );
? комментарии (обращение через метод comments ( ) );
? инструкции обработки (обращение через метод processinglnstructions ( ) );
? элементы или атрибуты, названия которых включают симролы, считающиеся недопустимыми в идентификаторе языка ActionScript (обращение через методы attribute ( ), child ( ), descendants ( ) или elements ( ) ).
Используя наш пример с корневым элементом, рассмотрим несколько наиболее распространенных способов обращения к данным XML.
Обращение к корневому узлу XML
В листинге 18.2 мы присвоили фрагмент XML из листинга 18.1 переменной novel. Для обращения к корневому элементу этого фрагмента (элемент А на рис. 18.2) мы просто используем переменную novel. Например, следующий код передает элемент (и, как следствие, всех его детей) в гипотетический метод
addToOrder ( ):
addToOrder(novel);
Обратите внимание, что элемент не имеет названия. Иными словами, мы пишем addToOrder (novel), а не так:
addToOrder(novel. BOOK); // Неправильно. addToOrder(novel. child(«BOOK»)); // Также неправильно.