Март 2011

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

Различные типы совпадений представлены такими константами, какМАТСН_ЕХАСТ, MATCH_STARTSWITH и MATCH_CONTAINS. Тип совпадений для текущего поиска может быть установлен и получен с помощью методов setMatchType ( ) и getMatchType ( ). Рассмотрим класс SearchOptions:

package { public class SearchOptions { public static const MATCH_EXACT:String = «Exact»; public static const MATCH_STARTSWITH:String = «StartsWith»; public static const MATCH_CONTAINS:String = «Contains»;

private var matchType:String;

public function SearchOptions ( ) { // По умолчанию используется режим «точного совпадения». setMatchTypeCSearchOptions. MATCHJXACT);

}

public function getMatchType ( ):String { return matchType;

}

public function setMatchType (newMatchType:String):void { matchType = newMatchType;

}

}

}

Класс JapaneseSearchOptions расширяет класс SearchOptions, добавляя настройки, характерные только для японско-английского режима поиска, — определение того, какой вариант английского языка должен использоваться для возвращаемых результатов: U. S. English (американский) или U. K. English (британский). Эти два варианта английского языка представляются константами ENGLISH_UK и ENGLISH_US. Вариант английского языка для текущего поиска может быть установлен и получен с помощью методов setEnglishVariant ( ) и getEnglishVariant ( ).

package {

public class JapaneseSearchOptions extends SearchOptions { public static const ENGLISH_UK:String = «EnglishUK»; public static const ENGLISHES:String = «EnglishUS»;

private var englishVariant:String;

public function JapaneseSearchOptions ( ) { setEnglishVariant(JapaneseSearchOptions. ENGLISHJJK);

}

public function getEnglishVariant ( ):String { return englishVariant;

}

public function setEnglishVariant (newEnglishVariant:String):void { englishVariant = newEnglishVariant;

}

}

}

Как и JapaneseSearchOptions, класс Engl ishSearchOpt ions расширяет класс SearchOptions, добавляя настройки, характерные только для англо-японского режима поиска, — определение того, набор каких символов должен использоваться для возвращаемых результатов: кандзи (набор идеографических символов) или хирагана (набор фонетических символов). Набор символов для текущего поиска может быть установлен или получен с помощью методов setKanj ilnResults ( ) и getKanj ilnResults ( ):

package { .

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

Public class EnglishSearchOptions extends SearchOptions { private var kanjiInResults:Boolean = false;

public function getKanjilnResults ( ):Boolean { return kanjiInResults;

}

public fun’ction setKanjiInResults (newKanjiInResults:Boolean):void { kanjiInResults = newKanjiInResults;

}

}

}

Наконец, рассмотрим основной класс приложения JEDict ionary, в котором происходит основная «магия», связанная с использованием пространств имен. Бегло просмотрите код класса, представленный в листинге 17.7, после чего мы рассмотрим его более подробно.

Листинг 17.7. Класс JEDictionary

package { import flash. display. Sprite;

public class JEDictionary extends Sprite { private var queryMan:QueryManager;

japanese var options:JapaneseSearchOptions; english var options:EnglishSearchOptions;

private var lang:Namespace;

public function JEDictionary( ) { queryMan = new QueryManager( );

japanese::options = new JapaneseSearchOptions( );

japanese::options. setMatchType(SearchOptions. MATCH_STARTSWITH);

japanese: :options. setEnglishVari ant (JapaneseSearchOptions. ENGLISHES);

english::options = new EnglishSearchOptions( );

engl i sh::opti ons. setMatchType(SearchOpti ons. MATCH_CONTAINS);

engli sh::opti ons. setKanjiInResul ts(true);

// Найти перевод японского слова… setModeJapaneseToEnglish( ); findWordC’sakana»);

// Найти перевод английского слова… setModeEnglishToJapaneseC ); findWordC’fish»);

}

public function findWord (word:String):void { var words:Array = queryMan. lang::search(word, lang::options); tracer Words found: » + words);

public function setModeEnglishToJapanese ( ):void { lang = english;

}

public function setModeJapaneseToEnglish ( ):void { lang = japanese;

}

}

}

Итак, основной класс приложения JEDictionary расширяет класс Sprite: public class JEDictionary extends Sprite {

Для поиска класс JEDictionary создает экземпляр класса QueryManager, который присваивается переменной queryMan:

private var queryMan:QueryManager;

Затем класс JEDictionary создает две переменные, каждая из которых имеет локальное имя options, уточняемое пространствами имен j apanese и english. Эти переменные хранят настройки поиска, которые будут передаваться в метод экземпляра search ( ) класса QueryManager. Обратите внимание, что их типы данных соответствуют типу выполняемого поиска:

japanese var options:JapaneseSearchOptions; english var options:EnglishSearchOptions;

После этого идет определение важной переменной lang, которая ссылается на пространство имен, соответствующее текущему режиму словаря (японскому или английскому):

private var lang:Namespace;

Это все, что касается переменных класса JEDictionary; теперь рассмотрим его методы: setModeEnglishTo Japanese ( ), setModeJapaneseToEnglish ( ) и findWord ( ). Они активизируют различные режимы словаря, присваивая переменной lang пространство имен english или j арапеse соответственно:

public function setModeEnglishToJapanese ( ):void { lang = english;

}

public function setModeJapaneseToEnglish ( ):void { lang = Japanese;

}

Метод findWord ( ) применяет объект класса QueryManager для выполнения поиска в словаре, используя подходящий метод search ( ). Вызов метода search ( ) является самой важной строкой кода в нашем примере со словарем:

queryMan. lang::search(word, lang::options)

Обратите внимание, что пространство имен (режим программы) определяет не только тип выполняемого поиска (поведение), но и тип вариантов, используемых для этого поиска (данные). Когда переменной lang присвоено пространство имен j арапе se, вызывается метод j арапе se: : search ( ), в который передается объект JapaneseSearchOptions. Когда переменной lang присвоено пространство имен english, вызывается метод english: : search ( ), в который передается объект EnglishSearchOptions.

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

Результат вызова метода search ( ) присваивается локальной переменной words, после чего полученные результаты отображаются в виде отладочного сообщения:

public function findWord (word:String):void { var words:Array = queryMan.1ang::search(word. lang::options); traceC Words found: » + words);

}

Для демонстрационных целей метод-конструктор класса JEDictionary выполняет поиск по словарю двух предопределенных слов (хотя в полнофункциональном приложении поиск по словарю обычно осуществляется в ответ на введенную пользователем строку). Процедура поиска выполняется экземпляром приложения QueryManager, который создается в конструкторе, как показано ниже:

queryMan = new QueryManager( );

Стандартные настройки для всех японско-английских и англо-японских поисков также задаются в конструкторе:

japanese::options = new JapaneseSearchOptions( );

japanese::options. setMatchType(SearchOptions. MATCH_STARTSWITH);

japanese::opti ons. setEngli shVari ant(JapaneseSearchOpti ons. ENGLISHJJS):

english::options = new EnglishSearchOptions( ):

engli sh::opti ons. setMatchType(SearchOpti ons. MATCH_CONTAINS):

engli sh::opti ons. setKanjiInResults(true);

Для осуществления поиска конструктор устанавливает режим словаря, после чего передает строку поиска в метод экземпляра findWord ( ) класса JEDictionary:

// Найти перевод японского слова… setModeJapaneseToEnglish( ); findWordC»sakana»);

// Найти перевод английского слова… setModeEnglishToJapanese( ); findWordC’fish»): }

В зависимости от режима словаря вызывается подходящий метод search ( ) и используются соответствующие варианты поиска.

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

Мы рассмотрели наш словарь! Кроме того, подошло к концу наше изучение пространств имен. Помните, что вы можете загрузить исходный код для приложения словаря и других примеров из этой главы по адресу http://www. moock. org/eas3/ examples.

Последние основные темы

Мы почти завершили рассмотрение базовых возможностей языка ActionScript. В двух последующих главах описываются две последние темы: создание и управление XML-данными и ограничения безопасности приложения Flash Player.

ПИВА IS

Язык XML и расширение Е4Х

С момента появления приложения Flash Player 5 язык ActionScript включает инструменты для работы со структурированными данными XML. В ActionScript 1.0 и ActionScript 2.0 создание и управление данными XML осуществлялось с помощью переменных и методов внутреннего класса XML (например, fir s tChi Id, next S ibl ing, appendChild( ) и т. д.). Класс XML был основан на стандарте Document Object Model (Объектная модель документа) консорциума W3C, или DOM, — стандарте для программного взаимодействия с документами XML (дополнительную информацию об этом стандарте можно найти по адресу http://www. w3.org/DOM).

В языке ActionScript 3.0 набор инструментов для создания и управления данными XML был полностью переработан. ActionScript 3.0 реализует стандарт ECMAScript for XML (Е4Х) — официальное расширение языка ЕСМА-262 для работы с данными XML в качестве встроенного типа данных. Стандарт Е4Х призван улучшить использование и гибкость работы с данными XML в языках, основанных на спецификации ЕСМА-262 (включая языки ActionScript и JavaScript).

Данные XML в виде иерархии

Перед тем как познакомиться с возможностями управления данными XML с помощью расширения Е4Х, мы должны понять общий принцип представления данных XML в виде иерархии. И прежний класс XML, и расширение Е4Х представляют данные XML в виде иерархического дерева, в котором каждый элемент и текстовый блок считается узлом дерева (то есть ветвью или листом). Например, рассмотрим фрагмент XML, приведенный в листинге 18.1 (фрагмент XML — это часть данных XML, взятых из документа XML).

Листинг 18.1. Пример XML-фрагмента



Ulysses

Joyce. James

Penguin Books Ltd

Элементы , , и ,атакжетекст «Ulysses», «Joyce, James» и «Penguin Books Ltd» считаются узлами дерева, как показано на рис. 18.1.

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

Элемент является корнем дерева, который еще называется корневым узлом структуры данных XML. Любой корректный XML-документ должен иметь всеобъемлющий корневой элемент наподобие элемента, который включает все остальные элементы.



Рис. 18.1. Пример иерархии XML

Когда узел содержится в другом узле, он называется ребенком содержащего его узла. С другой стороны, узел, содержащий узел-ребенка, называется его родителем. В нашем примере элемент является ребенком элемента, а элемент — родителем элемента.

Как ни удивительно, но элемент — это не первый по счету ребенок элемента, а второй. Первым ребенком фактически являются так называемые незначащие пробелы (новая строка и два пробела) в исходном коде фрагмента XML между тегами и. В расширении Е4Х незначащим пробелом может являться любой из следующих четырех символов форматирования: пробел (\u0020), возврат каретки (\u000D), перевод строки (\и000А)и символ табуляции (\u0009). В дереве документа XML текстовые блоки — даже если они содержат только пробельные символы — считаются узлами дерева. Таким образом, элемент имеет не три ребенка, а семь, четыре из которых являются так называемыми пробельными узлами (текстовые узлы, которые содержат только незначащие пробелы).

Семь детей узла называются узлами-братьями, поскольку они находятся на одном уровне в иерархии. Например, мы говорим, что следующим братом элемента является пробельный узел, а предшествующим братом элемента является другой пробельный узел. Вы видите, как текстовые узлы мешают при перемещении по иерархии от одного брата к другому. К счастью, по умолчанию, пробельные узлы игнорируются парсером1 расширения Е4Х. Расширение Е4Х позволяет считать элемент следующим братом элемента, что в большинстве случаев нам и нужно. В расширении Е4Х не придется обрабатывать пробельные узлы самостоятельно до тех пор, пока это действительно не потребуется (за данное поведение отвечает переменная экземпляра ignoreWhitespace класса XML, которая рассматривается далее,

Парсер — синтаксический анализатор.

в подразд. «Преобразование элемента XML в строку» разд. «Преобразование объектов XML и XMLList в строки»).

На последнем уровне иерархии мы видим, что у каждого из узлов, и есть один текстовый узел-ребенок: «Ulysses», «Joyce, James» и «Penguin Books Ltd» соответственно. Текстовые узлы являются конечными узлами в дереве.

В исходном коде XML текст, содержащийся в элементе, считается узлом-ребенком данного элемента в соответствующей древовидной иерархии документа XML.

Мы рассмотрели дерево данных XML из листинга 18.1, но по-прежнему ничего не знаем о месте атрибутов в этой иерархии. Можно предположить, что атрибут ISBN элемента превращается в узел-ребенка с именем ISBN. Однако на практике атрибут считается не ребенком элемента, определяющего этот атрибут, а его характеристикой. Мы рассмотрим способы обращения к атрибутам в расширении Е4Х далее, в подразд. «Обращение к атрибутам» разд. «Обращение к данным XML».

Теперь, когда известно, как данные XML могут быть представлены в виде концептуальной иерархии, можем рассмотреть способы представления, создания и обработки данных XML в расширении Е4Х.

Представление данных XML в расширении Е4Х

В расширении Е4Х данные XML представляются одним из двух встроенных типов данных языка ActionScript — XML и XMLList, а также их соответствующих классов с такими же именами — XML и XMLList.

Поскольку в расширении Е4Х появился тип данных XML, существующий класс XML из языков ActionScript 1.0 и ActionScript 2.0 в языке ActionScript 3.0 был переименован в класс XMLDocument и перемещен в пакет flash. mx.

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

Каждый экземпляр класса XML представляет один из следующих пяти возможных типов XML-содержимого, называемых типами узлов:

? элемент;

? атрибут;

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

? комментарий;

? инструкция обработки.

Если XML-элемент имеет элементы-детей (например, ребенок элемента ) или текстовые узлы-детей (например, ребенок «Ulysses» элемента ), то эти дети представляются в виде экземпляра класса XMLList из

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

? набор атрибутов или элементов, возвращаемых в результате поиска;

? группу фрагментов XML, каждый из которых имеет собственный корневой элемент;

? коллекцию текстовых узлов документа;

? коллекцию комментариев документа;

? коллекцию инструкций обработки документа.

Узлы-дети элемента, представленного экземпляром класса XML, всегда заключаются в экземпляр класса XMLList. Даже если элемент имеет только одного ребенка (скажем, только текстовый узел), этот ребенок все равно будет заключен в экземпляр класса XMLList. Если элемент XML имеет атрибуты, комментарии или инструкции обработки, все они подобным образом заключаются в объект XMLList родительского экземпляра класса XML. Однако комментарии и инструкции обработки по умолчанию игнорируются парсером расширения Е4Х (чтобы исключить игнорирование этих элементов, присвойте статическим переменным XML. ignoreComments и XML. ignore Processing]! instructions значение false).

Рассмотрим пример, демонстрирующий, как фрагмент XML представляется экземплярами классов XML и XMLList в расширении Е4Х. Вспомним исходный код XML из листинга 18.1:



Ulysses

Joyce, James

Penguin Books Ltd

С точки зрения расширения Е4Х элемент в данном коде представляется экземпляром класса XML. Он содержит два экземпляра класса XMLList — один для атрибутов элемента, а второй — для его элементов-детей. Элемент имеет только один атрибут, поэтому экземпляр класса XMLList для атрибутов элемента содержит только один экземпляр класса XML (представляющий атрибут ISBN). Экземпляр класса XMLList для элементов-детей элемента содержит три экземпляра класса XML, представляющих три элемента — , и . Каждый из этих экземпляров XML отдельно включает в себя экземпляр класса XMLList, содержащий по одному экземпляру класса XML, представляющего соответственно текстовые узлы-дети «Ulysses», «Joyce, James» и «Penguin Books Ltd». Эта структура изображена на рис. 18.2. На рисунке каждый элемент иерархии с корневым элементом обозначен буквой (от А до М), чтобы в дальнейшем было проще ссылаться на эти элементы.

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

Теперь применим рассмотренную теорию на практике, создав фрагмент с корневым элементом из листинга 18.1 с помощью методик расширения Е4Х.

XML

(ISBN=»0141182806″)

| | Экземпляр класса XML (элемент)

| | Экземпляр класса XML (атрибут)

| | Экземпляр класса XML (текстовый узел)

С% Экземпляр класса XMLList

I

XML \

W () I

D

XML \

W () |

Е

XML |

W ( )|

XML (Joyce, James)

1

XML (Penguin Books Ltd)

Рис. 18.2. Фрагмент с корневым элементом, представленный в расширении Е4Х

Создание данных XML с помощью расширения Е4Х

У нас есть три основных варианта создания фрагмента XML с корневым элементом, представленного в листинге 18.1, с использованием расширения Е4Х.

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

? Использовать конструктор класса XML, чтобы создать сначала новый экземпляр класса XML, а затем программным путем — оставшуюся часть фрагмента, применяя методики, описанные далее, в разд. «Изменение или создание нового содержимого XML».

? Использовать конструктор класса XML, чтобы создать новый экземпляр класса XML, а затем импортировать фрагмент из загруженного внешнего файла, как рассматривается далее, в разд. «Загрузка XML-данных».

? Ввести наши XML-данные в форме литерала, как обычную строку или число, в любом месте, где ActionScript допускает использование литералов.

Пока мы воспользуемся третьим подходом — создадим XML-фрагмент с помощью литерала XML. Это демонстрирует листинг 18.2. В нем переменной novel присваивается значение литерала XML (XML-фрагмент из листинга 18.1).

Листинг 18.2. Присваивание литерала XML переменной

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

При выполнении предыдущего кода среда Flash создает новый экземпляр класса XML расширения Е4Х, представляющий литерал фрагмента XML, и присваивает его переменной novel.

Чтобы просмотреть исходный код XML экземпляра класса XML (наподобие экземпляра, на который ссылается переменная novel), используйте метод экземпляра toXMLString() класса XML, как показано в следующей строке:

trace(novel. toXMLString( ));

Метод toXMLString() рассматривается далее, в разд. «Преобразование объектов XML и XMLList в строки».

Обратите внимание, что использование переводов строк и кавычек в предыдущем литерале XML является абсолютно нормальным. Компилятор знает, что они являются частью данных XML, и интерпретирует их так, как это необходимо. Где это возможно, компилятор даже конвертирует определенные зарезервированные символы в сущности языка XML. Дополнительную информацию можно найти в подразд. «Использование сущностей XML для специальных символов» разд. «Изменение или создание нового содержимого XML».

Язык ActionScript также позволяет использовать динамические выражения в литерале XML, поэтому названия элементов, атрибутов, значения атрибутов и содержимое элементов можно генерировать программным путем. Чтобы указать динамическое выражение в литерале XML, включите его в фигурные скобки ({ }). Например, следующий код задает название тега динамически:

var elementName:String = «BOOK»; var novel:XML = <{elementname}/>;

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

var rootElementName:String = «BOOK»; var rootAttributeName:String = «ISBN»;

var chiIdElementNames:Array = ["TITLE", "AUTHOR", "PUBLISHER"];

var book ISBN.-String = «0141182806″;

var bookTitle:String = «Ulysses»;

var bookAuthor:String = «Joyce, James»;

var bookPublisher:String = «Penguin Books Ltd»;

var novel:XML = <{rootelementname} {rootattributename}={bookisbn}> <{childelementnames[0]}>{bookTitle} <{childelementnames[l]}>{bookAuthor} <{chiidelementnames[2]}>{bookPublisher} ;

Стоит отметить, что, поскольку символы { } применяются для обозначения динамического выражения, их использование в некоторых частях литерала XML недопустимо. В частности, внутри названия элемента, названия атрибута или содержимого элемента для представления символов { и } должны использоваться сущности & #х7В; h} соответственно. Тем не менее в виде литерала символы

{ и } могут быть использованы внутри значения атрибута, раздела С DATA, инструкции обработки или комментария.

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

Теперь, когда у нас появилась переменная novel, определенная в листинге 18.2, которая ссылается на фрагмент XML из листинга 18.1, рассмотрим, как можно обращаться к различным частям фрагмента с помощью методик кодирования расширения Е4Х.

Обращение к данным XML

Расширение Е4Х предлагает два основных набора инструментов для обращения к данным в иерархии XML:

? методы обращения к содержимому классов XML и XMLList (attribute ( ), attributes ( ), child ( ), children ( ), comments ( ), descendants ( ), elements ( ), parent ( ), processinglnstructions ( ) и text ( ) );

? обращение в стиле доступа к переменным с помощью операторов «точка» (.), «потомок» (. .) и «атрибут» (@).

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

? родитель экземпляра класса XML (обращение через метод parent ( ) );

? комментарии (обращение через метод comments ( ) );

? инструкции обработки (обращение через метод processinglnstructions ( ) );

? элементы или атрибуты, названия которых включают симролы, считающиеся недопустимыми в идентификаторе языка ActionScript (обращение через методы attribute ( ), child ( ), descendants ( ) или elements ( ) ).

Используя наш пример с корневым элементом, рассмотрим несколько наиболее распространенных способов обращения к данным XML.

Обращение к корневому узлу XML

В листинге 18.2 мы присвоили фрагмент XML из листинга 18.1 переменной novel. Для обращения к корневому элементу этого фрагмента (элемент А на рис. 18.2) мы просто используем переменную novel. Например, следующий код передает элемент (и, как следствие, всех его детей) в гипотетический метод

addToOrder ( ):

addToOrder(novel);

Обратите внимание, что элемент не имеет названия. Иными словами, мы пишем addToOrder (novel), а не так:

addToOrder(novel. BOOK); // Неправильно. addToOrder(novel. child(«BOOK»)); // Также неправильно.

Руководство по 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, содержащим только его».



Полезные ссылки
Случайные записи
  • 18.05.2010">Самоучитель по креативному веб-дизайну. Книга 2, стр.55
  • 09.03.2011">Руководство по actionscript. часть 4, стр. 059
  • 03.03.2011">Руководство по actionscript. часть 5, стр. 059
  • 22.01.2011">Руководство по actionscript. часть 1, стр. 143
  • 19.05.2010">Самоучитель по креативному веб-дизайну. Книга 2, стр.36
  • 27.02.2011">Руководство по actionscript. часть 6, стр. 046
  • 23.07.2011">Обновление линейки Aspire One
  • 19.03.2011">Руководство по actionscript. часть 2, стр. 100
  • 03.06.2010">Самоучитель по креативному веб-дизайну. Книга 3, стр.39
  • 05.03.2011">Руководство по actionscript. часть 5, стр. 009
  • 15.03.2011">Руководство по actionscript. часть 3, стр. 054
  • 03.06.2010">Самоучитель по креативному веб-дизайну. Книга 3, стр.61
  • 06.03.2011">Руководство по actionscript. часть 4, стр. 142
  • 13.02.2014">Преимущества МДФ панелей
  • 18.05.2010">Самоучитель по креативному веб-дизайну. Книга 2, стр.91
Опрос

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

View Results

Loading ... Loading ...