<b>pt.element += new XML('<element id="5"><name>Бop</name></element>');</b>
При работе с фрагментами XML вместо конструктора
<b>XML()</b>
используется конструктор
<b>XMLList():</b>
<b>pt.element += new XMLList( <element id="6"><name>Углерод</namex/element>' +</b>
<b> ' <element id="7"xname>Азот</name></element>');</b>
После создания XML-документа для доступа к его содержимому можно использовать интуитивно понятный синтаксис Е4Х:
<b>var elements = pt.element; // Вернет список всех тегов <element></b>
<b>var names = pt.element.name; // Список всех тегов <name></b>
<b>var n = names[0]; // "Водород": содержимое тега <name> с номером 0.</b>
Кроме того, расширение Е4Х добавляет новый синтаксис для работы с объектами XML. Оператор .. - это оператор доступа к вложенным элементам. Его можно использовать вместо привычного оператора . доступа к членам:
<b>// Другой способ получить список всех тегов <name> </b>
<b>var names2 = pt..name;</b>
Расширение E4X позволяет использовать даже оператор шаблона:
<b>// Получить все вложенные теги <element>.</b>
<b>// Это еще один способ получить список всех тегов <пате>.</b>
<b>var names3 = pt.element.*;</b>
Расширение E4X отличает имена атрибутов от имен тегов с помощью символа @ (этот синтаксис заимствован из языка XPath). Например, значение атрибута можно запросить, как показано ниже:
<b>// Получить атомное число гелия </b>
<b>var atomicNumber = pt.element[1].@id;</b>
Оператор шаблона для имен атрибутов имеет вид
<b>// Список свех атрибутов всех тегов <element></b>
<b>var atomicNums = pt.element.@*;</b>
Расширение E4X включает даже мощные и удивительно выразительные синтаксические конструкции для фильтрации списков с помощью произвольных выражений-предикатов:
<b>// Отфильтровать список всех элементов так, чтобы </b>
<b>// он включал только элементы с атрибутом id < 3</b>
<b>var lightElements = pt.element.(@id < 3);</b>
<b>// Отфильтровать список всех тегов <element> так, чтобы он включал только те.</b>
<b>// имена которых начинаются с символа "Б". Затем создать список тегов <пате></b>
<b>// из оставшихся тегов <element>.</b>
<b>var bElementNames = pt.element.(name.charAt(0) == 'Б').name;</b>
Цикл
<b>fог/each</b>
, с которым мы познакомились выше в этой главе (раздел 11.4.1), в расширении Е4Х дополнен возможностью итераций по спискам тегов и атрибутов XML. Напомню, что цикл
<b>for/each</b>
похож на цикл
<b>for/in</b>
, за исключением того, что вместо итераций по свойствам объекта он выполняет итерации по значениям свойств:
<b>// Вывести названия всех элементов периодической таблицы </b>
<b>for each (var е in pt.element) {</b>
<b> console.log(e.name);</b>
<b>}</b>
<b>// Вывести атомные числа элементов</b>
<b>for each (var n in pt.element.@*) console.log(n);</b>
В расширении E4X выражения могут присутствовать слева от оператора присваивания. Это позволяет изменять существующие и добавлять новые теги и атрибуты:
<b>// Изменить тег <element> для Водорода - добавить в него новый атрибут </b>
<b>// и новый дочерний элемент, чтобы он выглядел так:</b>
<b>//</b>
<b>// <element id="1" symbol="B"></b>
<b>// <name>Водород</name></b>
<b>// <weight>1.00794</weight></b>
<b>// </element></b>
<b>//</b>
<b>pt.element[0].@symbol = "B";</b>
<b>pt.element[0].weight = 1.00794;</b>
Так же легко можно удалять теги и атрибуты, используя стандартный оператор delete:
<b>delete pt.element[0].©symbol; // удалить атрибут</b>
<b>delete pt..weight; // удалить все теги <weight></b>
Расширение E4X реализовано так, что позволяет выполнять большинство типичных операций с документами XML с помощью привычного синтаксиса языка. В Е4Х также имеются методы, которые можно вызывать относительно объектов XML. Например, метод
<b>insertChildBefore():</b>
<b>pt.insertChildBefore(pt.element[ 1],</b>
<b><element id="1"><name>Дeйтepий</name></element>);</b>