Расширение E4X позволяет использовать даже оператор шаблона:
// Получить все вложенные теги <element>.
// Это еще один способ получить список всех тегов <пате>.
var names3 = pt.element.*;
Расширение E4X отличает имена атрибутов от имен тегов с
помощью символа @ (этот синтаксис заимствован из языка XPath). Например, значение атрибута можно запросить, как показано ниже:
// Получить атомное число гелия
var atomicNumber = pt.element[1].@id;
Оператор шаблона для имен атрибутов имеет вид
// Список свех атрибутов всех тегов <element>
var atomicNums = pt.element.@*;
Расширение E4X включает даже мощные и удивительно выразительные синтаксические конструкции для фильтрации списков с помощью произвольных выражений-предикатов:
// Отфильтровать список всех элементов так, чтобы
// он включал только элементы с атрибутом id < 3
var lightElements = pt.element.(@id < 3);
// Отфильтровать список всех тегов <element> так, чтобы он включал только те.
// имена которых начинаются с символа "Б". Затем создать список тегов <пате>
// из оставшихся тегов <element>.
var bElementNames = pt.element.(name.charAt(0) == 'Б').name;
Цикл
fог/each
, с которым мы познакомились выше в этой главе (раздел 11.4.1), в расширении Е4Х дополнен возможностью итераций по спискам тегов и атрибутов XML. Напомню, что цикл
for/each
похож на цикл
for/in
, за исключением того, что вместо итераций по свойствам объекта он выполняет итерации по значениям свойств:
// Вывести названия всех элементов периодической таблицы
for each (var е in pt.element) {
console.log(e.name);
}
// Вывести атомные числа элементов
for each (var n in pt.element.@*) console.log(n);
В расширении E4X выражения могут присутствовать
слева от оператора присваивания. Это позволяет изменять существующие и добавлять новые теги и атрибуты:
// Изменить тег <element> для Водорода - добавить в него новый атрибут
// и новый дочерний элемент, чтобы он выглядел так:
//
// <element id="1" symbol="B">
// <name>Водород</name>
// <weight>1.00794</weight>
// </element>
//
pt.element[0].@symbol = "B";
pt.element[0].weight = 1.00794;
Так же легко можно удалять теги и атрибуты, используя стандартный оператор delete:
Расширение E4X реализовано так, что позволяет выполнять большинство типичных операций с документами XML с помощью привычного синтаксиса языка. В Е4Х также имеются методы, которые можно вызывать относительно объектов XML. Например, метод
insertChildBefore:
pt.insertChildBefore(pt.element[ 1],
<element id="1"><name>Дeйтepий</name></element>);
Расширение E4X полностью поддерживает пространства имен, а также включает синтаксические конструкции и функции для работы с пространствами имен XML:
// Объявить пространство имен по умолчанию с помощью инструкции
// "default xml namespace" statement:
default xml namespace = "http://www.w3.org/1999/xhtml";
// Следующий документ xhtml содержит несколько тегов svg: