Беларусь, рогачёв |
Работа флэш-программ в Internet
Работа с XML
Для чего можно использовать XML во Флэш МХ? Например, для:
- параметризации флэш-роликов (описание состояния флэш-ролика);
- взаимодействия с сервером.
Во Flash MX есть довольно хорошее DOM-ориентированное API, предоставляющее доступ к структуре дерева разобранного флэш-плеером XML.
Всю необходимую функциональность предоставляет объект XML, про который можно почитать в разделе " Objects / Client/Server " Flash Reference. Мы же подробно останавливаться на описании этого объекта здесь не будем, рассмотрим только самые нужные операции, а также обсудим моменты, характерные для работы с объектом 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 ). Все прочие особенности работы методов те же, и даже ошибки в документации совпадают.