Март 2011

Руководство по 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».

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

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

с зарезервированными символами в именах

Если имя атрибута или элемента содержит символ, который считается недопустимым для использования в идентификаторах языка ActionScript (например, дефис), вы не сможете обратиться к этому атрибуту или элементу с помощью оператора «точка». Вместо этого необходимо использовать метод attribute ( ), child ( ) или оператор [ ]. Например:

var saleEndsDate:XML = February 1, 2006 trace(saleEndsDate. mME-ZONE); // НЕДОПУСТИМО! He делайте так.

trace(saleEndsDate. attribute(«TIME-ZONE»)): // Допустимо. Делайте так. traceCsaleEndsDate.@["TIME-ZONE"]): // Тоже допустимо.

В случае с недопустимым кодом saleEndsDate. @ TIME-ZONE среда выполнения Flash трактует дефис как операцию вычитания и интерпретирует выражение как saleEndsDate. @Т1МЕ минус ZONE! По всей видимости, переменная (или метод) с именем ZONE не существует, поэтому среда выполнения Flash сгенерирует следующее сообщение об ошибке:

Access of undefined property ‘ZONE’

По-русски это будет выглядеть так: Обращение к неопределенному свойству ‘ZONE’.

Однако если бы переменная ZONE существовала, ее значение было бы вычтено из пустого объекта XMLList, представленного выражением saleEndsDate. @Т1МЕ, и никакой ошибки не возникло бы! Без сообщений об ошибках неправильное обращение к элементу saleEndsDate. @TIME-ZONE будет очень сложно выявить. Принимая во внимание, что атрибут saleEndsDate. @TI ME не существует, нам бы хотелось, чтобы среда выполнения Flash сгенерировала ошибку «несуществующего атрибута», но, к сожалению, в версии спецификации Е4Х, реализованной в языке ActionScript 3.0, оговаривается, что в результате обращения к несуществующим атрибутам должен возвращаться пустой объект XMLL i s t, не приводя к возникновению ошибки. Будущие версии языка ActionScript могут исправить эту ситуацию.

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

Интерпретация объекта XMLList как экземпляра класса XML

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

novel. AUTHORC0].setName(«WRITER»):

эквивалентно выражению:

novel. AUTHOR. setNameC»WRITER»): // Опущен [0]

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



Полезные ссылки
Случайные записи
  • 07.03.2011">Руководство по actionscript. часть 4, стр. 110
  • 15.03.2011">Руководство по actionscript. часть 3, стр. 059
  • 02.03.2011">Руководство по actionscript. часть 5, стр. 081
  • 02.06.2010">Самоучитель по креативному веб-дизайну. Книга 3, стр.124
  • 05.03.2011">Руководство по actionscript. часть 5, стр. 007
  • 23.01.2011">Руководство по actionscript. часть 1, стр. 067
  • 11.05.2010">Самоучитель по креативному веб-дизайну. Книга 1, стр.26
  • 13.06.2010">Самоучитель по креативному веб-дизайну. Книга 4, стр.94
  • 18.05.2010">Самоучитель по креативному веб-дизайну. Книга 2, стр.107
  • 17.05.2010">Самоучитель по креативному веб-дизайну. Книга 2, стр.111
  • 11.05.2010">Самоучитель по креативному веб-дизайну. Книга 1, стр.35
  • 23.02.2011">Руководство по actionscript. часть 7, стр. 032
  • 16.03.2011">Руководство по actionscript. часть 3, стр. 023
  • 11.03.2011">Руководство по actionscript. часть 3, стр. 146
  • 04.03.2011">Руководство по actionscript. часть 5, стр. 042
Опрос

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

View Results

Loading ... Loading ...