Чтение онлайн

ЖАНРЫ

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

// Создать объект XML

var pt = <periodictable>

<element іd="1"><name>Водород</name></еlеment>

<element іd="2"><name>Гелий</name></еlement>

<element id="3"><name>/Литий</name></element>

</periodictable>;

//
Добавить новый элемент в таблицу

pt.element += <element іd="4"><name>Бериллий</name></element;

Синтаксис литералов XML в расширении Е4Х в качестве экранирующих символов использует угловые скобки, что позволяет помещать в разметку XML произвольные выражения на языке JavaScript. Ниже демонстрируется еще один способ создания точно такого же элемента XML, как в примере выше:

pt = <periodictable></periodictable>; // Создать пустую таблицу

var elements = ["Водород", "Гелий", "Литий"]; // Добавить элементы

// Создать теги XML, используя содержимое массива

for(var n = 0; n < elements.length; n++) {

pt.element += <element id={n+1}><name>{elements[n]}</name></element>;

}

В дополнение к синтаксису литералов можно также извлекать данные из строк с разметкой XML. Следующий пример добавляет в периодическую таблицу еще один элемент:

pt.element += new XML('<element id="5"><name>Бop</name></element>');

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

XML
используется конструктор
XMLList:

pt.element += new XMLList( <element id="6"><name>Углерод</namex/element>' +

' <element id="7"xname>Азот</name></element>');

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

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

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

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

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

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

var names2 = pt..name;

Расширение 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 выражения могут присутствовать слева от оператора присваивания. Это позволяет изменять существующие и добавлять новые теги и атрибуты:

Поделиться с друзьями: