Руководство по actionscript. часть 3, стр. 067
Для обращения к уточненным пространствам имен элементам и атрибутам из листинга 18.14 мы должны сначала получить ссылку на используемые пространства имен. Чтобы получить ссылку на пространство http: / /www. example. com/ furniture, мы вызываем метод экземпляра namespace ( ) класса XML над корневым узлом документа, передавая в качестве аргумента префикс «shop». В результате метод namespace ( ) возвращает объект Namespace, представляющий пространство имен http://www. example. com/furniture. Мы присваиваем этот объект переменной shopNS для дальнейшего использования, var shopNS:Namespace = catalog. namespaceCshop»);
В качестве альтернативы, если известен идентификатор URI пространства имен, можно создать ссылку на объект Namespace, используя конструктор одноименного класса:
var shopNS:Namespace = new Namespace(«http://www. example. com/furniture»):
Чтобы получить ссылку на пространство имен, используемое по умолчанию, мы вызываем метод namespace ( ) над корневым узлом документа, не передавая префикс пространства имен:
var htmlNS:Namespace = catalog. namespace( ):
В качестве альтернативы, если известен идентификатор URI пространства имен, мы можем создать ссылку на объект Namespace, используемый по умолчанию, с помощью конструктора одноименного класса:
var htmlNS:Namespace = new Namespace(«http://www. w3.org/1999/xhtml»);
Для обращения к пространствам имен документа могут использоваться и методы inScopeNamespaces ( ) и namespaceDeclarations ( ). Дополнительную информацию можно найти в справочнике по языку ActionScript корпорации Adobe.
В расширении Е4Х атрибуты пространств имен XML не представляются в виде атрибутов (то есть к ним нельзя обратиться с помощью метода attributesC) или выражения некийЭлемент.®*). Вместо этого для обращения к объявлениям пространств имен элемента применяется метод экземпляра namespaceDeclarations() класса XML.
Теперь, когда у нас есть ссылка на объект Namespace, мы можем обращаться к уточненным пространством имен элементам и атрибутам, используя уточненные имена в следующем общем формате:
пространствоИмен::локальноеИмяЭлемента пространствоИмен::$локальноеИмяАтрибута
Например, вот так записывается уточненное имя элемента в коде на языке ActionScript:
shopNS::price
Обратите внимание на использование оператора уточнителя имени (: :), который отделяет имя пространства имен от локального имени.
Вот так можно обратиться к элементу
catalog. htmlNS::body
Для обращения к элементу, который является ребенком элемента , используется следующая запись:
catalog. htmlNS::body. shopNS::table
Для обращения к атрибуту shop: id используется такая запись:
catalog. htmlNS::body. shopNS::table.@shopNS::id
Для обращения к элементу мы можем использовать следующий «кошмарный» код:
catalog. htmlNS::body. shopNS: -.table. htmlNS::table. htmlNS: :tr[ 1].htmlNS::td[l].shopNS::price
Однако мы будем спать спокойнее, если воспользуемся преимуществом оператора «потомок» (. .) в двух местах, как показано в следующем коде:
catalog. .shopNS: -.table. .shopNS: :price
И все равно повторное использование shopNS: : слегка раздражает. Мы можем избежать нескольких лишних нажатий клавиш, попросив язык ActionScript автоматически уточнять все неуточненные имена элементов и атрибутов с помощью
выбранного пространства имен. Для этого мы используем инструкцию назначения пространства имен XML по умолчанию, которая имеет следующий вид:
default xml namespace = пространствоИменИлиСтрокаиЙ1
Например, следующий код заставляет язык ActionScript автоматически уточнять все неуточненные имена элементов и атрибутов с помощью пространства имен http://www. example. com/furniture:
default xml namespace = shopNS;
После выполнения этой инструкции пространство имен http: / / www. example. com/ furniture применяется ко всем неуточненным ссылкам на элементы и атрибуты, поэтому мы можем сократить следующий код:
catalog..shopNS::table..shopNS::price
до записи:
catalog..table..price
» «|СяР Из»за ошибки в приложении Flash Player 9 при выполнении предыдущего примера кода 1—1 (catalog..table..price) в первый раз возвращается значение undefined.
Руководство по actionscript. часть 3, стр. 068
В более полном примере документ каталога, скорее всего, будет содержать несколько элементов. Для обращения к определенному столу нам придется использовать фильтрующий предикат, как показано в следующем коде:
catalog..table.(@id == 4875)..price
В листинге 18.15 приведен код, который можно использовать для обращения и отображения информации обо всех столах из каталога.
Листинг 18.15. Отображение всех столов из каталога
var shopNS:Namespace = catalog. namespaceCshop»); default xml namespace = shopNS: for each (var table:XML in catalog..table) { trace(table..desc + «: » + table..price):
}
Как и в случае с именами элементов и атрибутов, мы можем использовать групповой символ свойств (*) с пространствами имен. Например, следующий код возвращает объект XMLList, представляющий все элементы