Руководство по actionscript. часть 3, стр. 031

В двух предыдущих примерах элемент ошибочно считается ребенком объекта, на который ссылается переменная novel, хотя это не так. Как обращаться к элементам-детям, мы рассмотрим в следующем разделе.

Стоит отметить, что не существует прямого способа обратиться к корневому узлу из любого заданного ребенка. Однако мы можем использовать метод экземпляра parent ( ) (рассматриваемый далее) класса XML, чтобы подняться вверх по иерархии элементов к корневому узлу, как показано в листинге 18.3.

Листинг 18.3. Пользовательский метод для обращения к корневому узлу

// Возвращает корневой узел иерархии XML из любого заданного ребенка public function getRoot (chi1dNode:XML):XML { var parentNode:XML = chi1dNode. parent( ); if (parentNode!= null) {

return getRoot(parentNode); } else { return chi1dNode;

}

}

// Применение: getRoot(некийРебенок);

Обращение к узлам-детям

Для обращения к экземпляру класса XMLList, представляющего узлы-детей элемента (элемент В на рис. 18.2), мы используем метод экземпляра children ( ) класса XML, не принимающего никаких аргументов. Например:

novel. children( ) // Возвращает объект XMLList, представляющий узлы-детей // элемента

В качестве альтернативы мы можем обратиться к узлам-детям элемента с помощью более удобного группового символа свойств (*) расширения Е4Х. Например:

novel.* // Также возвращает объект XMLList, представляющий // узлы-детей элемента

Для обращения к определенному ребенку в объекте XMLList мы используем уже знакомый оператор доступа к элементу массива — [ ]. Например, чтобы обратиться ко второму ребенку элемента — элементу (элемент D на рис. 18.2), мы используем:

novel. children( )[1] // Обращаемся ко второму узлу-ребенку элемента или:

novel.// Также обращаемся ко второму узлу-ребенку элемента

Хотя в расширении Е4Х нет переменной firstChild или lastChild (как в существующем классе XMLDocument), обратиться к первому ребенку в списке узлов-детей можно следующим образом:

узел. children( )[0]

К последнему ребенку в списке узлов-детей можно обратиться следующим образом:

узел. children( )[узел. children( ).length( )-l]

Однако обращение к узлу-ребенку по его позиции в списке может быть затруднительным, и поэтому значимость данного метода обращения в расширении Е4Х была снижена. В расширении Е4Х обращение к узлам-детям обычно происходит по их именам, а не по позиции. Для обращения к узлу-ребенку по имени применяется метод экземпляра child ( ) класса XML, который возвращает объект XMLList со всеми элементами-детьми, соответствующими указанному имени. Например, чтобы получить объект XMLList со всеми детьми элемента с именем «AUTHOR», используется следующий код:

novel. child(«AUTHOR») // Возвращает все элементы-детей элемента // с именем «AUTHOR»

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

novel. AUTHOR // Также возвращает все элементы-детей элемента // с именем «AUTHOR»

Если элемент содержит два элемента , выражение nove 1. AUTHOR вернет объект XMLList с двумя экземплярами класса XML, представляющими данные элементы. Для обращения к первому элементу мы могли бы использовать выражение novel. AUTHOR [ 0 ]. Для обращения ко второму элементу — выражение novel. AUTHOR [ 1 ], как показано в следующем коде:

var novel:XML =

Jacobs, Tom Schumacher, Jonathan
;

novel. AUTHOR[0]; // Обращение к Jacobs, Tom

novel. AUTH0R[1]; // Обращение к Schumacher, Jonathan

Безусловно, элемент из листинга 18.1 содержит только одного ребенка с именем «AUTHOR», поэтому объект XMLList, возвращаемый выражением novel. AUTHOR, имеет только один экземпляр класса XML (представляющий единственный элемент ). Для обращения к данному элементу мы могли бы использовать следующий код:

novel. AUTHORC0] // Обращение к экземпляру элемента

Однако (и это замечательно!) в большинстве случаев включать [0] не требуется. Чтобы сделать обращение к узлу более удобным, расширение Е4Х реализует специальное поведение для объектов XMLList, имеющих только один экземпляр класса XML (как в случае с выражением novel. AUTHOR в нашем примере). Когда метод класса XML вызывается над объектом XMLList, имеющим только один экземпляр класса XML, этот вызов метода автоматически переадресуется данному экземпляру. Выполняя переадресацию вызова метода, расширение Е4Х позволяет

программисту рассматривать объект XMLList с одним экземпляром класса XML так, будто данный объект XMLList и является экземпляром класса XML. Как указано в спецификации, расширение Е4Х «намеренно стирает различие между отдельным объектом класса XML и объектом класса XMLList, содержащим только его».

Руководство по actionscript. часть 3, стр. 032

Предположим, что мы хотим изменить название элемента с «AUTHOR» на «WRITER». Мы могли бы использовать следующий код, который явно обращается к экземпляру элемента :

novel. AUTHORCO].setNameC»WRITER»);

Однако обычно используется следующий более удобный код, который неявно обращается к экземпляру элемента , опуская оператор обращения к элементу массива ( [ 0 ], следующий за выражением novel. AUTHOR):

novel. AUTHOR. setName(«WRITER»);

Когда мы вызываем метод setName ( ) непосредственно над объектом XMLList, возвращаемым выражением novel. AUTHOR, среда выполнения Flash распознает, что данный список содержит только один экземпляр класса XML () и автоматически переадресует вызов метода setName ( ) данному экземпляру. В результате название единственного элемента, содержащегося в объекте novel. AUTHOR, изменяется с «AUTHOR» на «WRITER».

В большинстве случаев данный трюк языка ActionScript упрощает написание XML-кода и делает его интуитивно понятным. Однако использовать эту методику следует осторожно. Например, следующий код вызывает метод setName ( ) над объектом XMLList, который содержит несколько экземпляров класса XML:

var novel:XML =

Jacobs. Tom Schumacher. Jonathan
;

novel. AUTHOR. setName(‘WRITER’);

При выполнении предыдущего кода среда Flash сгенерирует следующую ошибку:

The setName method works only on lists containing one item.

На русском языке она будет выглядеть так: Метод setName работает только для списков, содержащих один элемент.

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

Обращение к текстовым узлам

Как уже известно из разд. «Данные XML в виде иерархии», текст, содержащийся в элементе, представляется в виде узла в иерархии XML. Например, в следующем XML-фрагменте (повторяемом из листинга 18.2)текст «Ulysses» является текстовым узлом. Он представляется экземпляром класса XML, типом узла которого является текст, как и текстовые узлы «Joyce, James» и «Penguin Books Ltd».

Руководство по actionscript. часть 3, стр. 033

Var novel:XML = Ulysses Joyce. James Penguin Books Ltd ;

К текстовым узлам можно обращаться различными способами в зависимости от наших потребностей. Когда необходимо обратиться к текстовому узлу как к экземпляру класса XML, нужно использовать синтаксис обращения к узлу-ребенку, рассмотренный в предыдущем разделе. Например, чтобы обратиться к тексту «Ulysses», который является первым ребенком элемента, мы можем использовать следующий код:

novel. TITLE. children( )[0] // Обращаемся к текстовому узлу Ulysses

Или, в качестве альтернативы, мы можем использовать групповой символ свойств:

novel. TITLE.*[0] // Тоже обращаемся к текстовому узлу Ulysses

Оба предыдущих примера возвращают объект XML (а не строку), который представляет текст элемента » U1 у s s е s «. Мы можем вызывать методы класса XML над этим объектом точно так же, как и над любым другим объектом XML. Например:

novel. TITLE.*Е0].parent( ) // Обращение к элементу novel. TITLE.*[0].nodeKind( ) // Возвращает строку «text» novel. TITLE.*[0].toString( ) // Возвращает строку «Ulysses»

Однако если мы хотим просто обратиться к содержимому текстового узла, как к значению типа String, а не к экземпляру класса XML, то можем использовать метод экземпляра toString ( ) класса XML над его родительским элементом. Для таких элементов, как, например, , которые содержат только один текстовый узел-ребенок (без других промежуточных элементов), метод toString ( ) возвращает текст этого узла-ребенка, опуская начальные и конечные теги родительского элемента. Таким образом, выражение novel. TITLE. toString ( ) вернет строку «Ulysses»:

trace(novel. TITLE. toString( )); // Выводит: Ulysses

Обдумывая предыдущую строку кода, не забудьте, что на самом деле это сокращенный вариант следующего кода:

trace(novel. TITLE[0].toString( )): // Выводит: Ulysses

Сокращенный вариант выражения novel. TITLE. toString ( ) возвращает значение «Ulysses «, поскольку среда выполнения Flash знает, что объект XMLList, на который ссылается выражение novel. TITLE, имеет всего один экземпляр класса XML (), и автоматически переадресует вызов метода toString ( ) данному экземпляру.

При обращении к содержимому текстового узла как к значению типа String мы можем опускать явный вызов метода toString ( ), поскольку среда выполнения Flash вызывает метод toString ( ) автоматически, когда вместо строки используется нестроковое значение. Например, функция trace ( ) в качестве аргумента принимает строку, поэтому вместо явного вызова метода toString ( ):

trace(novel. TITLE. toString( )): // Выводит: Ulysses

мы можем позволить среде выполнения Flash вызвать этот метод неявно:

traceCnovel. TITLE); // Также выводит: Ulysses

Подобным образом при присваивании содержимого текстового узла Ulysses переменной типа String вместо использования такого полностью явного кода:

var ti tleName:Stri ng = novel. TITLECO].toStringC ):

мы можем использовать просто:

var ti tleName:Stri ng = novel. TITLE:

Замечательная возможность. И зачастую именно этот способ применяется для получения текста, содержащегося в элементе, в расширении Е4Х.

Руководство по actionscript. часть 3, стр. 034

Для текстовых узлов, которые разбросаны между другими элементами, можно использовать метод экземпляра text ( ) класса XML, чтобы получить текстовые узлы, не содержащиеся в элементах. Чтобы проиллюстрировать данную возможность, временно добавим элемент к элементу, как показано в следующем примере:

var novel:XML = Ulysses Joyce. James Penguin Books Ltd A Very thick book. :

Элемент содержит как элементы-детей, так и текстовые узлы-детей:

? А (текстовый узел);

? Very (элемент с текстовым узлом-ребенком);

? thick book, (текстовыйузел).

Чтобы получить объект XMLList, содержащий два текстовых узла А и thick book., мы используем следующее выражение:

novel. DESCRIPTION. text( )

Для обращения к этим текстовым узлам используется оператор доступа к элементу массива:

trace(novel. DESCRIPTION. text( )[0]); // Выводит: А trace(novel. DESCRIPTION. text( )[1]): // Выводит: thick book.

Метод text ( ) также можно применять для получения текстовых узлов из всего объекта XMLLi s t, а не только из одного элемента XML. Предположим, что у нас есть объект XMLList, представляющий всех детей элемента из листинга 18.2 (до момента добавления элемента ):

novel.*

Чтобы поместить текстовые узлы каждого ребенка из этого списка в объект XMLLi s t для последующей обработки, например, для создания пользовательского интерфейса, применяется следующий код:

novel.*.text( )

И снова для обращения к текстовым узлам мы используем оператор доступа к элементу массива:

trace(novel.*.text( )[0]): // Выводит: Ulysses trace(novel.*.text( )[1]); // Выводит: Joyce, James trace(novel.*.text( )[2]); // Выводит: Penguin Books Ltd

Однако метод экземпляра text ( ) класса XMLList оказывается менее полезным при использовании над списком элементов, который содержит и текстовые узлы-детей, и элементы-детей. Если узел содержит и текстовые узлы-детей, и элементы-детей (например, узел ), то возвращается только первый текстовый узел-ребенок; остальные дети игнорируются. Например:

var novel:XML = Ulysses Joyce. James Penguin Books Ltd A Very thick book. ;

trace(novel.*.text( )[3]): // Выводит: A

// остальные узлы-дети — Very // и thick book. — игнорируются

Обращение к узлам-родителям

Для обращения к узлу-родителю данного узла используется метод экземпляра parent ( ) класса XML, не принимающий аргументов. Предположим, что переменная pub содержит ссылку на элемент из листинга 18.2.

Руководство по actionscript. часть 3, стр. 035

Var pub:XML = novel. PUBLISHERS];

Для обращения к родителю узла (которым является ) мы используем следующий код:

pub. parent( )

Метод parent ( ) может так же успешно применяться для обращения к любому узлу-предку, как показано в следующем коде:

// Создаем иерархию XML с тремя уровнями.

var doc:XML = :

// Присваиваем ссылку на элемент var kid:XML = doc. parent. child[0];

// Используем метод parent( ) для последовательного обращения к элементу

// из элемента

var grandparent:XML = kid. parent( ).parent( );

I В отличие от методов children() и child(), метод экземпляра parent() класса XML не ft А % имеет альтернативного синтаксиса в стиле обращения к переменным.

Когда метод parent ( ) применяется к экземпляру класса XMLList, он возвращает значение nul 1, если только родителем всех элементов списка не является один и тот же элемент, который и возвращается в этом случае. Например, в следующем коде мы получаем экземпляр класса XMLList, представляющий три ребенка элемента, а затем вызываем метод parent ( ) над этим списком. Поскольку родителем всех трех детей является один и тот же элемент, возвращается этот родитель, var bookDetai Is.-XMLList = novel.*;

var book:XML = bookDetaiIs. parent( ); // Возвращает элемент

Вызов метода parent ( ) над объектом XMLList, содержащим всего один экземпляр класса XML, идентичен вызову метода parent ( ) над этим экземпляром. Например, следующие две строки кода являются тождественными:

novel. PUBLISHER^].parentC ) // Обращается к novel. PUBLISHER. parent( ) // Также обращается к

Когда метод parent ( ) вызывается над экземпляром класса XML, представляющим атрибут, возвращается элемент, для которого этот атрибут определен. Это демонстрирует следующий код, в котором используется еще не рассмотренный метод доступа к атрибутам (этот метод будет описан в ближайшее время):

novel.@ISBN. parent( ) // Возвращает элемент

Обращение к узлам-братьям

Как уже известно из разд. «Данные XML в виде иерархии», узел-брат — это узел, который находится непосредственно возле другого узла на данном уровне иерархии XML. Например, в знакомой нам иерархии элемент является предшествующим братом элементов и и следующим братом элемента .

Руководство по actionscript. часть 3, стр. 036

Var novel:XML =

Ulysses

Joyce. James

Penguin Books Ltd :

В расширении Е4Х отсутствует встроенная поддержка перемещений между узлами-братьями в иерархии XML. Переменные nextSibling и previousSibling, поддерживаемые в модели DOM, не являются частью интерфейса API расширения Е4Х. Однако следующий брат любого узла может быть получен с помощью следующего кода, предполагая, что у данного узла есть узел-родитель:

некийУзел. рагепК ) .*[^екмУзел. childlndex( )+1];

Предшествующий брат может быть найден с помощью следующего кода:

некийУзел. parent( ) *[некийУзел. chi1dlndex( )-1];

Например, данный код обращается к предшествующему и следующему братьям элемента :

var author:XML = novel. AUTHOR[0]; // Предшествующий брат

trace(author. parent( ).*[author. childlndex( )-l]); // Выводит: Ulysses // Следующий брат

trace(author. parent( ).*[author. childIndex( )+1]); // Выводит:

// Penguin Books Ltd

В листинге 18.4 представлен код пользовательского метода для обращения к предшествующему брату данного узла. Обратите внимание, что метод добавляет код для проверки того, что указанный узел действительно имеет предшествующего брата, перед тем как вернуть его.

Листинг 18.4. Пользовательский метод previousSibling()

public function previousSibling (theNode:XML):XML { // Проверяем, что узел действительно имеет предшествующего брата, // перед тем как вернуть его

if (theNode. parent( ) != null && theNode. childIndex( ) > 0) {

return theNode. parent( ).*[theNode. childIndex( )-l]; } else {

return null;

}

}

// Использование:

previ ousSi bli ng(некийУзел);

В листинге 18.5 определен метод nextSibling ( ) — метод-компаньон пользовательского метода previous Sibling ( ), определенного в листинге 18.4. Обратите внимание, что метод добавляет код для проверки, что указанный узел действительно имеет следующего брата, перед тем как вернуть его.

Руководство по actionscript. часть 3, стр. 037

Листинг 18.5. Пользовательский метод nextSibling()

public function nextSibling (theNode:XML):XML { if (theNode. parent( ) != null

&& theNode. childlndex( ) < thenode.parent( ).children( ).length( )-l) { return thenode.parent( ).*[thenode.childindex( )+l]; } else { return null;

}

}

// Использование: nextSibling(некийУзел):

Расширение E4X уменьшает необходимость доступа к узлам-братьям, поскольку основное внимание уделяется обращению к элементам по их имени. Например, для обращения к элементу с помощью расширения Е4Х мы обычно используем простую запись novel. TITLE, а не author. parent( ).*[author. childIndex( )-1].

Обращение к атрибутам

Для обращения к объекту XMLList, представляющему все атрибуты элемента, используется метод экземпляра attributes ( ) класса XML, не принимающий аргументов. Он имеет следующий общий вид:

weK^^ewewr. attributesC )

Например, следующий код возвращает объект XMLLi st, представляющий атрибуты элемента (элемент L на рис. 18.2):

novel. attributesC )

В качестве альтернативы для обращения к объекту XMLList, представляющему атрибуты элемента, можно использовать более удобный синтаксис специального символа атрибутов (@ *) расширения Е4Х, который записывается следующим образом:

некийЭлемент.@* // Возвращает объект XMLList, представляющий все атрибуты // элемента некийЭлемент

Например, приведенный ниже код, который является эквивалентом выражения novel. attributes ( ), возвращает объект XMLList, представляющий атрибуты элемента (элемент L на рис. 18.2):

novel.@*

Как и в случае с элементами, для обращения к атрибутам в объекте XMLList можно использовать оператор доступа к элементу массива ( [ ] ). Например, следующий код обращается к первому и единственному атрибуту элемента — ISBN (элемент М на рис. 18.2):

novel. attributesC )[0]

Следующий код также обращается к первому атрибуту элемента (снова ISBN), но использует синтаксис специального символа атрибутов расширения Е4Х:

novel.@*[0]

Однако ни выражение novel. @* [0] ,ни выражение novel. attributes ( ) [0] не представляют обычный код расширения Е4Х. В расширении Е4Х обращение к атрибутам редко происходит по их порядковому номеру в документе XML. Обычно к атрибутам обращаются по имени, используя либо метод attribute ( ), либо более удобный синтаксис обращения к переменным расширения Е4Х. Для обращения к атрибуту по его имени с помощью метода attribute ( ) используется следующий обобщенный код:

некийЭлемент. attгibuteC»имяАтрибу те»)

Данный код возвращает объект XMLLi st, содержащий атрибут с именем им я Атрибута элемента некийЭлемент. Например, следующий код возвращает объект XMLList, который содержит один экземпляр класса XML, представляющий атрибут ISBN (элемент М на рис. 18.2) элемента :

novel. attri bute(«ISBN»)

Данное выражение является эквивалентом обращения к атрибуту по имени с использованием синтаксиса обращения к переменной:

некийЭлемент.$имяАтрибута

Например, следующий код также вернет объект XMLList, содержащий один экземпляр класса XML, который представляет атрибут ISBN элемента, но в данном случае используется синтаксис обращения к переменной:

novel.(aiSBN

Каки child( ), метод attribute ( ) возвращает объект XMLList, содержащий экземпляры класса XML, которые соответствуют указанному имени. Однако, поскольку два или более атрибута одного элемента не должны иметь одинаковые имена, объект XMLList, возвращаемый методом attribute ( ), всегда содержит только один экземпляр класса XML (представляющий атрибут с указанным именем).

Руководство по actionscript. часть 3, стр. 038

Для обращения к экземпляру класса XML, который содержится в объекте XMLList, возвращаемом выражением novel. @ ISBN, мы могли бы использовать следующий код:

novel.@ISBN[0]

Но при вызове метода класса XML над данным экземпляром мы обычно опускаем оператор обращения к элементу массива ([ 0 ]), как показано в следующем коде:

novel ЖЪЪН. некийМетодКлассаХМи )

Можно опустить запись [ 0 ], поскольку, как мы уже знаем, когда метод класса XML вызывается над объектом XMLList, содержащим только один экземпляр этого класса, вызов метода автоматически переадресуется данному экземпляру. Например, следующий явный код:

novel.@ISBN[0].parentC ) // Возвращает узел

является эквивалентом такого неявного кода:

novel.@ISBN. parent( ) // Также возвращает узел

С другой стороны, экземпляры класса XML, представляющие атрибуты, никогда не имеют детей и, следовательно, большая часть методов класса XML остается невостребованной. Вместо этого экземпляр класса XML, представляющий атрибут, используется всего лишь для хранения значения данного атрибута. Для обращения к значению атрибута используется метод экземпляра toString ( ) класса XML. Например, следующий код присваивает значение атрибута ISBN элемента переменной booklSBN, используя полностью явное выражение:

var booklSBN:String = novel.@ISBN[0].toStringC );

Однако не забывайте, что мы можем вызвать метод toS tring ( ) непосредственно над результатом выражения novel. @ ISBN (вместо выражения novel. @ ISBN [ 0 ] ), поскольку возвращаемый объект XMLList содержит только один экземпляр класса XML. Вот более короткая и более типичная запись:

var booklSBN-.String = novel.@ISBN. toString( ); // Опущена запись [0]

Приведенную строку кода можно сделать еще короче. Класс XML является динамическим. Таким образом, мы можем использовать возможность автоматического преобразования типов данных языка ActionScript, чтобы преобразовать значение любой переменной экземпляра класса XML к строке (правила преобразования типов данных языка ActionScript описаны в гл. 8):

var booklSBN:String = novel.@ISBN:

В данном коде переменная novel представляет экземпляр динамического класса (XML). Следовательно, когда мы присваиваем типизированной переменной booklSBN значение переменной ISBN этого экземпляра, компилятор откладывает проверку типов до этапа выполнения программы. На этапе выполнения, поскольку

тип данных переменной booklSBN является примитивным (String), значение переменной ISBN автоматически преобразуется к этому типу.

Руководство по actionscript. часть 3, стр. 039

Достаточно удобно. Эту возможность можно использовать и для преобразования к другим примитивным типам данных. Например, следующий код преобразует значение атрибута ISBN к числу путем простого присваивания этого значения переменной с типом данных Number:

var booklSBN:Number = novel.@ISBN;

При работе с атрибутами следует помнить, что значение атрибута всегда имеет тип String, даже когда кажется, что с логической точки зрения оно должно иметь другой тип. Для использования этого значения в качестве другого типа данных (не String) необходимо выполнить его явное или неявное преобразование. Чтобы избежать неприятных сюрпризов, следует постоянно помнить о правилах преобразования типов данных, которые были рассмотрены в гл. 8. В частности, запомните, что строковое значение «false» преобразуется в значение true типа Boolean! По этой причине при работе с атрибутами, которые хранят булеву информацию, проще использовать сравнение строк, чем преобразовывать значение атрибута к типу данных Boolean.

Например, следующий код добавляет новый атрибут INSTOCK, который обозначает доступность книги в настоящий момент, к элементу. Чтобы отобразить сообщение о доступности книги, сравним значение выражения novel. @INSTOCK со строкой «false» вместо того, чтобы преобразовывать значение выражения novel. @ INSTOCK в значение типа Boolean. Перед сравнением в качестве меры предосторожности мы также преобразуем все символы значения атрибута к нижнему регистру.

I При сравнении атрибутов помните, что они всегда являются строками, а сравнение j « выполняется с учетом регистра символов.

fly_

var novel:XML = Ulysses Joyce. James Penguin Books Ltd :

// Сравниваем со строкой «false» вместо преобразования в тип Boolean if (novel. LINSTOCK. toLowerCase( ) == «false») {

traceC’Not Available!»): } else {

traceC’Available!»):

}

Обращение к комментариям и инструкциям обработки

Двумя последними типами узлов, к которым можно обращаться с помощью расширения Е4Х, являются комментарии и инструкции обработки. Комментарии языка XML имеют следующий вид:



Инструкции обработки языка XML принимают такой вид:



Для обращения к этим двум вспомогательным типам данных можно использовать методы экземпляра comments ( ) nprocessinglnstructions( ) класса XML. Оба метода возвращают объект XMLList, представляющий всех непосредственных детей элемента, которые являются либо комментариями, либо инструкциями обработки соответственно. Однако по умолчанию парсер расширения Е4Х игнорирует и комментарии, и инструкции обработки. Чтобы получить доступ к комментариям документа XML или фрагмента XML, перед обработкой данных переменной XML. ignoreComments необходимо присвоить значение false, как показано в следующем коде: XML. ignoreComments = false:

Подобным образом, для того чтобы получить доступ к инструкциям обработки документа XML или фрагмента XML, перед обработкой данных переменной XML. ignoreProcessinglnstructions необходимо присвоить значение false, как показано в следующем коде:

XML. ignoreProcessinglnstructions = false:

Следует обратить внимание на то, что переменные XML. ignoreComments и XML. ignoreProcessinglnstructions являются статическими, значения им присваиваются через класс XML, а не через отдельные экземпляры класса XML. Значения, присвоенные переменным XML. ignoreComments и XML. ignoreP rocessinglnstructions, влияют на все последующие операции обработки XML-данных.

Руководство по actionscript. часть 3, стр. 040

В листинге 18.6, например, с корневым узлом добавляются два комментария и две инструкции обработки, а также показано, как обращаться к добавленным элементам. Обратите внимание, что переменным XML. ignoreComments и XML. ignoreProcessinglnstructions присваивается значение false до того, как литерал XML будет присвоен переменной novel. Обратите также внимание, что, хотя комментарии и инструкции обработки разбросаны между детьми элемента, методы comments ( ) nprocessinglnstructions( ) игнорируют других детей и возвращают список, состоящий только из комментариев и инструкций обработки.

Листинг 18.6. Обращение к комментариям и инструкциям обработки

XML. ignoreComments = false:

XML. ignoreProcessinglnstructions = false:

// Создаем XML-фрагмент, который содержит комментарии и инструкции обработки var novel:XML =





Ulysses

Joyce, James


Penguin Books Ltd



trace(novel. comments( )[0]); //

trace(novel. comments( )[1]); //

trace(novel. processingInstructions( )[0]); //

trace(novel. processingInstructions( )[1]); //

Чтобы получить объект XMLList, представляющий все комментарии и инструкции обработки для всего дерева XML (а не только непосредственных детей узла), используйте оператор «потомок» в сочетании с групповым символом свойств, как показано в следующем коде:

var tempRoot:XML = : tempRoot. appendChi1d(novel):

trace(tempRoot..*.comments( )[0]); // Первый комментарий в документе

Мы рассмотрим представленный метод более подробно далее, в разд. «Обход деревьев XML».



Полезные ссылки
Случайные записи
  • 03.06.2010">Самоучитель по креативному веб-дизайну. Книга 3, стр.56
  • 17.05.2010">Самоучитель по креативному веб-дизайну. Книга 2, стр.123
  • 09.05.2010">Самоучитель по креативному веб-дизайну. Книга 1, стр.148
  • 02.06.2010">Самоучитель по креативному веб-дизайну. Книга 3, стр.114
  • 18.05.2010">Самоучитель по креативному веб-дизайну. Книга 2, стр.98
  • 01.03.2011">Руководство по actionscript. часть 5, стр. 115
  • 12.03.2011">Руководство по actionscript. часть 3, стр. 128
  • 09.05.2010">Самоучитель по креативному веб-дизайну. Книга 1, стр.132
  • 25.02.2011">Руководство по actionscript. часть 6, стр. 094
  • 03.06.2010">Самоучитель по креативному веб-дизайну. Книга 3, стр.66
  • 23.01.2011">Руководство по actionscript. часть 1, стр. 009
  • 19.05.2010">Самоучитель по креативному веб-дизайну. Книга 2, стр.32
  • 02.06.2010">Самоучитель по креативному веб-дизайну. Книга 3, стр.120
  • 18.05.2010">Самоучитель по креативному веб-дизайну. Книга 2, стр.80
  • 13.06.2010">Самоучитель по креативному веб-дизайну. Книга 4, стр.90
Опрос

Какие цвета вы предпочитаете?

View Results

Loading ... Loading ...