JavaScript. Подробное руководство, 6-е издание, стр. 157

<b>pt.element += new XML('&lt;element id=&quot;5&quot;&gt;&lt;name&gt;Бop&lt;/name&gt;&lt;/element&gt;');</b>

При работе с фрагментами XML вместо конструктора

<b>XML()</b>
используется конструктор
<b>XMLList():</b>

<b>pt.element += new XMLList( &lt;element id=&quot;6&quot;&gt;&lt;name&gt;Углерод&lt;/namex/element&gt;' +</b>

<b>  ' &lt;element id=&quot;7&quot;xname&gt;Азот&lt;/name&gt;&lt;/element&gt;');</b>

После создания XML-документа для доступа к его содержимому можно использовать интуитивно понятный синтаксис Е4Х:

<b>var elements = pt.element; // Вернет список всех тегов &lt;element&gt;</b>

<b>var names = pt.element.name; // Список всех тегов &lt;name&gt;</b>

<b>var n = names[0]; // &quot;Водород&quot;: содержимое тега &lt;name&gt; с номером 0.</b>

Кроме того, расширение Е4Х добавляет новый синтаксис для работы с объектами XML. Оператор .. - это оператор доступа к вложенным элементам. Его можно использовать вместо привычного оператора . доступа к членам:

<b>// Другой способ получить список всех тегов &lt;name&gt; </b>

<b>var names2 = pt..name;</b>

Расширение E4X позволяет использовать даже оператор шаблона:

<b>// Получить все вложенные теги &lt;element&gt;.</b>

<b>// Это еще один способ получить список всех тегов &lt;пате&gt;.</b>

<b>var names3 = pt.element.*;</b>

Расширение E4X отличает имена атрибутов от имен тегов с помощью символа @ (этот синтаксис заимствован из языка XPath). Например, значение атрибута можно запросить, как показано ниже:

<b>// Получить атомное число гелия </b>

<b>var atomicNumber = pt.element[1].@id;</b>

Оператор шаблона для имен атрибутов имеет вид

<b>// Список свех атрибутов всех тегов &lt;element&gt;</b>

<b>var atomicNums = pt.element.@*;</b>

Расширение E4X включает даже мощные и удивительно выразительные синтаксические конструкции для фильтрации списков с помощью произвольных выражений-предикатов:

<b>// Отфильтровать список всех элементов так, чтобы </b>

<b>// он включал только элементы с атрибутом id &lt; 3</b>

<b>var lightElements = pt.element.(@id &lt; 3);</b>

<b>// Отфильтровать список всех тегов &lt;element&gt; так, чтобы он включал только те.</b>

<b>// имена которых начинаются с символа &quot;Б&quot;. Затем создать список тегов &lt;пате&gt;</b>

<b>// из оставшихся тегов &lt;element&gt;.</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>// Изменить тег &lt;element&gt; для Водорода - добавить в него новый атрибут </b>

<b>// и новый дочерний элемент, чтобы он выглядел так:</b>

<b>//</b>

<b>// &lt;element id=&quot;1&quot; symbol=&quot;B&quot;&gt;</b>

<b>// &lt;name&gt;Водород&lt;/name&gt;</b>

<b>// &lt;weight&gt;1.00794&lt;/weight&gt;</b>

<b>// &lt;/element&gt;</b>

<b>//</b>

<b>pt.element[0].@symbol = &quot;B&quot;;</b>

<b>pt.element[0].weight = 1.00794;</b>

Так же легко можно удалять теги и атрибуты, используя стандартный оператор delete:

<b>delete pt.element[0].©symbol; // удалить атрибут</b>

<b>delete pt..weight; // удалить все теги &lt;weight&gt;</b>

Расширение E4X реализовано так, что позволяет выполнять большинство типичных операций с документами XML с помощью привычного синтаксиса языка. В Е4Х также имеются методы, которые можно вызывать относительно объектов XML. Например, метод

<b>insertChildBefore():</b>

<b>pt.insertChildBefore(pt.element[ 1],</b>

<b>&lt;element id=&quot;1&quot;&gt;&lt;name&gt;Дeйтepий&lt;/name&gt;&lt;/element&gt;);</b>