Класс для создания древовидного объекта по XML строке.
Допустим у нас есть XML данные, полученные с удаленного хоста или еще как-нибудь. Xml может иметь смешанный тип, т.е. есть и обязательные теги (типа response), так и повторяющиеся на разных уровнях (section, id и т.д.)
Xml:
В программе удобней работать с объектом, чем с текстовыми данными, для этого служит следующий класс:
package Lib { public class XMLTree { private var _xml:XML = null; private var _data:Object = new Object(); private var _maxElem:int = 500;//ограничение на число элементов //конструктор, передается текстовый xml public function XMLTree(_xml:String) { this._xml = new XML(_xml); //создание объекта this.xmlParser(this._xml, this._data);//парсинг } public function getData():Object { return this._data; } //рекурсивный обход дерева private function xmlParser(node, obj:Object):void { var sObjName = ""; //по каждому ответвлению for (var i = 0; i < node.length() && i < this._maxElem; i++) { sObjName = node[i].name(); //если это ветка (имеет дочерей) if(node[i].hasComplexContent()) { //т.к. названия веток могут повторяться. Если свойство уже существует, то создается свойство с именем = имя + _ + уникальный идентификатор if(obj[sObjName] != undefined) { sObjName = sObjName + "_" + i; } //передаем ветку и текущее положение в деревянном объекте на следующий цикл рекурсии obj[sObjName] = new Object; this.xmlParser(node[i].children(), obj[sObjName]); } else { //создаем свойство с именем ветки XML объекта и текстовым значением obj[sObjName] = node[i].text(); } //if }//for }//func }//class }//packageСледующий код создаем объект и перечисляет значения первой ветки section дерева:
var xmlObj:XMLTree = new XMLTree(sXml); var data:Object = xmlObj.getData(); for(var o in data.response.section) { Alert.show(data.response.section[o]); }
Алексей, а вот вопрос к вам по теме Flex и XML
ОтветитьУдалитьМожет покажется слегка банальным, но загвоздка такая -
1. Есть XML
2. Есть Комбобос и серверный пхп скрипт.
3. Задача
- получил xml настроив источник данных.
- заполнил Именами выпадающий список комбобокса.
- выбираю в комбобоксе Имя
- Необходимо в некую переменную получить соответствующий имени параметр тип_ид
- сформировать http запрос http:\\1.ru\delo=type_id (имени которое выбрано в комбобоксе).
Прошу пример, как выбрать type_id из xml соответствующего имени и сформировать запрос.
Flex только только открыл для себя. Перерыл кучу примеров, решения не нашел.
2. "" хмл строка. Формат соблюден.
ОтветитьУдалитьЗадайте лучше этот вопрос на каком-нибудь форуме. Я уж тож подзабросил флекс.
ОтветитьУдалитьКак вы формируете источник данных для ComboBox`a? если передаёте xml в качестве dataProvider тогда [comboBox].selectedItem.@type_id.toString - это если type_id аттрибут тэга xml
ОтветитьУдалить[comboBox].selectedItem.type_id.toString() - это если type_id это дочерний тэг
если возникнут вопросы пишите на metmitnik@gmail.com.