Московский физико-технический институт
Опубликован: 23.12.2005 | Доступ: свободный | Студентов: 2869 / 253 | Оценка: 4.61 / 4.44 | Длительность: 27:18:00
ISBN: 978-5-9556-0051-2
Лекция 14:

Работа флэш-программ в Internet

Работа с XML

Для чего можно использовать XML во Флэш МХ? Например, для:

  • параметризации флэш-роликов (описание состояния флэш-ролика);
  • взаимодействия с сервером.

Во Flash MX есть довольно хорошее DOM-ориентированное API, предоставляющее доступ к структуре дерева разобранного флэш-плеером XML.

Всю необходимую функциональность предоставляет объект XML, про который можно почитать в разделе " Objects / Client/Server " Flash Reference. Мы же подробно останавливаться на описании этого объекта здесь не будем, рассмотрим только самые нужные операции, а также обсудим моменты, характерные для работы с объектом XML в Интернет.

Навигация по дереву XML

Обсудим самые нужные операции на примере.

Пусть у нас есть такой XML:

<root>
<person age='25'>Kate</person>
<person age='24'>John</person>
</root>

Напишем фрагмент кода, позволяющий вывести эту информацию в табличном виде.

xmlObj = new XML (
"<root><person age='25'>Kate</person><person age = '24'>John</person></root>"
); //создали XML-объект
xmlObj.ignoreWhite = true; 
// командуем игнорировать пробелы (не считать их узлами дерева)
var rootElement = xmlObj.firstChild; 
// ссылка на корневой элемент
for (
var person = rootElement.firstChild; person != null; 
person = person.nextSibling
) {
  trace (person.firstChild.nodeValue + ": " 
+ person.attributes.age);
}

Давайте обсудим цикл более подробно.

В начале переменная person ссылается на первый дочерний элемент в <root>, коим является первый тег person. Текст " Kate " является вложенным в него элементом, поэтому обращение к нему требует еще одного firstChild. Этот элемент ( Kate ) - элемент-"примитив" (не содержит вложенных элементов, поэтому у него определено свойство nodeValue, равное " Kate ". К атрибутам элемента person мы обращаемся через его свойство attributes, являющееся объектом-"хэш-таблицей" атрибутов. Прежде чем перейти к очередной итерации цикла, мы присваиваем переменной цикла person свойство nextSibling, указывающее на следующий элемент, лежащий на одном уровне с person. Так мы переходим к обработке следующего человека.

Получение XML с сервера и отправка его на сервер

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

Рассмотрим пример загрузки XML c веб-сервера.

var xmlObj = new XML():
xmlObj.onLoad = function () {		//callback-обработчик
	//...здесь уже можно обходить дерево XML и читать данные
}
xmlObj.load(http://www.myserver1.com/cgi-bin/getxml.cgi);

Объект также позволяет отправлять XML на сервер (метод send ), одновременно отправлять и загружать ответ (метод sendAndLoad ). Для контроля над процессом загрузки можно использовать методы getBytesLoaded() и getBytesTotal(). Эти методы полностью аналогичны одноименным методам из класса LoadVars за тем естественным исключением, что отсутствует аргумент, задающий тип запроса. XML всегда приходит на сервер с запросом POST (за исключением того случая, когда XML пуст, тогда, как обычно, применяется метод GET ). Все прочие особенности работы методов те же, и даже ошибки в документации совпадают.