Начал изучать Flex. Хочу поделиться некоторыми наработками, которые могут пригодиться.Класс для создания древовидного объекта по 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.