![]() |
|
||||||||||
|
|||||
|
Регистрация: Apr 2007
Сообщений: 57
|
допустим имеется *.xml-файл приблизительного формата:
<?xml version="1.0" encoding="UTF-8"?> <contents> <mainText header="Жилой дом"><![CDATA[Современные квартиры и развитая инфраструктура. <br/><br/>Для просмотра деталей кликните на дом. ]]></mainText> <podjezd1> <etazh8> <flat1 price="810001"></flat1> <flat2 price="810002"></flat2> <flat3 price="810003"></flat3> <flat4 price="810004"></flat4> <flat5 price="810005"></flat5> </etazh8> <etazh9> <flat1 price="910001"></flat1> <flat2 price="910002"></flat2> <flat3 price="910003"></flat3> <flat4 price="910004"></flat4> <flat5 price="910005"></flat5> </etazh9> <etazh10> <flat1 price="101001"></flat1> <flat2 price="101002"></flat2> <flat3 price="101003"></flat3> <flat4 price="101004"></flat4> <flat5 price="101005"></flat5> </etazh10> </podjezd1> <podjezd2> <etazh5> <flat1 price="250001"></flat1> <flat2 price="250002"></flat2> <flat3 price="250003"></flat3> <flat4 price="250004"></flat4> <flat5 price="250005"></flat5> </etazh5> <etazh6> <flat1 price="260001"></flat1> <flat2 price="260002"></flat2> <flat3 price="260003"></flat3> <flat4 price="260004"></flat4> <flat5 price="260005"></flat5> </etazh6> <etazh7> <flat1 price="270001"></flat1> <flat2 price="270002"></flat2> <flat3 price="270003"></flat3> <flat4 price="270004"></flat4> <flat5 price="270005"></flat5> </etazh7> <etazh8> <flat1 price="280001"></flat1> <flat2 price="280002"></flat2> <flat3 price="280003"></flat3> <flat4 price="280004"></flat4> <flat5 price="280005"></flat5> </etazh8> <etazh9> <flat1 price="290001"></flat1> <flat2 price="290002"></flat2> <flat3 price="290003"></flat3> <flat4 price="290004"></flat4> <flat5 price="290005"></flat5> </etazh9> <etazh10> <flat1 price="301001"></flat1> <flat2 price="302002"></flat2> <flat3 price="303003"></flat3> <flat4 price="304004"></flat4> <flat5 price="305005"></flat5> </etazh10> </podjezd2> <podjezd3> <etazh1> <flat1 totalspace="110,96" rooms="3" room1="48,8" room2="19,26" room3="15,59" prijomka="3,78" wc="2,96" sub1="1,71" sub2="1,34" corridor="17,52" price="130001">sold</flat1> <flat2 totalspace="56,54" rooms="2" room1="16,08" room2="15,87" prijomka="2,88" wc="2,47" sub1="2,9" corridor="18,95" price="130002">reserved</flat2> </etazh1> <etazh2> <flat1 totalspace="47,95" rooms="1" room1="19,94" kitchen="14,1" wc="4,73" balcony="6,16" corridor="6,1" price="230001"></flat1> <flat2 totalspace="60,51" rooms="2" room1="19,09" room2="14,17" kitchen="10,95" wc="1,63" bath="3,77" balcony="2,66" corridor="10,13" price="230002"></flat2> <flat3 totalspace="79,42" rooms="3" room1="17,11" room2="15,98" room3="14,01" kitchen="11,19" wc="1,6" bath="3,62" balcony="6,08" corridor="11,22" sub1="1,65" price="230003">sold</flat3> </etazh2> </contents> Как из него считывать данные? Я знаю как считывать с односложного, формата В чём отличия? |
|
|||||
|
Модрон-ветеринар
|
У вас XML неверно организован.
Пример сложного конфига и его парсера: <?xml version="1.0" encoding="UTF-8"?> <contents> <mainText header="Жилой дом"><![CDATA[Современные квартиры и развитая инфраструктура. <br/><br/>Для просмотра деталей кликните на дом. ]]></mainText> <podjezds> <podjezd id="1"> <floor id="1"> <flat id="1" price="810001">Описание 1 квартиры 1 этажа 1 подъезда</flat> <flat id="2" price="65654">Описание 2 квартиры 1 этажа 1 подъезда</flat> <flat id="3" price="54654654">Описание 3 квартиры 1 этажа 1 подъезда</flat> </floor> <floor id="2"> <flat id="1" price="54654">Описание 1 квартиры 2 этажа 1 подъезда</flat> <flat id="2" price="5654">Описание 2 квартиры 2 этажа 1 подъезда</flat> <flat id="3" price="810001">Описание 3 квартиры 2 этажа 1 подъезда</flat> </floor> <floor id="3"> <flat id="1" price="810001">Описание 1 квартиры 3 этажа 1 подъезда</flat> <flat id="2" price="810001">Описание 2 квартиры 3 этажа 1 подъезда</flat> <flat id="3" price="810001">Описание 3 квартиры 3 этажа 1 подъезда</flat> </floor> </podjezd> <podjezd id="2"> <floor id="1"> <flat id="1" price="810001">Описание 1 квартиры 1 этажа 2 подъезда</flat> <flat id="2" price="810001">Описание 2 квартиры 1 этажа 2 подъезда</flat> <flat id="3" price="810001">Описание 3 квартиры 1 этажа 2 подъезда</flat> </floor> <floor id="2"> <flat id="1" price="810001">Описание 1 квартиры 2 этажа 2 подъезда</flat> <flat id="2" price="222222">Описание 2 квартиры 2 этажа 2 подъезда</flat> <flat id="3" price="810001">Описание 3 квартиры 2 этажа 2 подъезда</flat> </floor> <floor id="3"> <flat id="1" price="810001">Описание 1 квартиры 3 этажа 2 подъезда</flat> <flat id="2" price="810001">Описание 2 квартиры 3 этажа 2 подъезда</flat> <flat id="3" price="810001">Описание 3 квартиры 3 этажа 2 подъезда</flat> </floor> </podjezd> </podjezds> </contents> var xmlData:XML = new XML(); xmlData.ignoreWhite = true ; xmlData.onLoad = loadXML; xmlData.load('config.xml'); var house:Array = new Array(); //сюда будем загонять извлеченные из конфига даные var mTextHeader:String ; var mTextContent:String ; function loadXML(success:Boolean) { if (success) { var mainNode:XMLNode = this.firstChild ; mTextHeader = mainNode.firstChild.attributes['header']; //получили значение атрибута header узла <mainText> mTextContent = mainNode.firstChild.firstChild.nodeValue ;//получили значение CDATA узла <mainText> var amountPodjezds:Number = mainNode.childNodes[1].childNodes.length ; //количесвто подъездов, mainNode.childNodes[1] - это узел <podjezds> for (i = 0; i < amountPodjezds; i++) { //Предполагая, что номера (id) подъездов в атрибуте id узлов <floor> //могут "плавать", то есть быть перепутаны в конфиге или начинаться //например, не с 1, вводим собственную нумерацию для //дальнейшего использования в коде var idPod:Number = Number(mainNode.childNodes[1].childNodes[i].attributes['id']); house[idPod] = new Array(); //массив, где содержится вся инфа подъезда house[idPod]['floors'] = new Array(); //создаем массивы для работы с этажами подъезда (то есть уже массивы 3 уровня) var amountFloors:Number = mainNode.childNodes[1].childNodes[i].childNodes.length ;//количесвто этажей в подъезде for (j = 0; j < amountFloors; j++) { //Проворачиваем аналогично для id этажей var idFloor:Number = Number(mainNode.childNodes[1].childNodes[i].childNodes[j].attributes['id']); house[idPod]['floors'][idFloor] = new Array(); //массив, где содержится вся инфа этажа house[idPod]['floors'][idFloor]['flats'] = new Array();//создаем массивы для работы с квартирами этажа (то есть уже массивы 5 уровня) var amountFlats:Number = mainNode.childNodes[1].childNodes[i].childNodes[j].childNodes.length ;//количесвто квартир на этаже for (k = 0; k < amountFlats; k++) { var idFlat:Number = Number(mainNode.childNodes[1].childNodes[i].childNodes[j].childNodes[k].attributes['id']); house[idPod]['floors'][idFloor]['flats'][idFlat] = new Array(); //массив, где содержится вся инфа квартиры house[idPod]['floors'][idFloor]['flats'][idFlat]['price'] = Number(mainNode.childNodes[1].childNodes[i].childNodes[j].childNodes[k].attributes['price']); house[idPod]['floors'][idFloor]['flats'][idFlat]['decsr'] = mainNode.childNodes[1].childNodes[i].childNodes[j].childNodes[k].firstChild.toString() ; //описание квартиры trace(house[idPod]['floors'][idFloor]['flats'][idFlat]['decsr']) } } } nextActions(); } else { tPercent.text = 'Ошибка связи\nс конфигуратором данных xml'; } } function nextActions() { trace('=================') trace(mTextContent); trace('=================') trace('Описание: ' + house[2]['floors'][2]['flats'][2]['decsr']) //Описание 2 квартиры 2 этажа 2 подъезда trace('Цена: ' + house[2]['floors'][2]['flats'][2]['price']) //Цена 2 квартиры 2 этажа 2 подъезда } Замечание. По сути, такое подход многим покажется избыточным - создание сложной структуры вложенных массивов для хранения данных, в то время как экземпляр полученного XML уже является сложным массивом. Но для удобства последующего обращения к данным я, например, делаю именно так.
__________________
Идите первым! Последний раз редактировалось mooncar; 16.09.2011 в 11:41. |
|
|||||
|
Регистрация: Apr 2007
Сообщений: 57
|
mooncar, спасибо тебе огромное. Честно говоря я тоже сторонник большего количества самих файлов, но в упрощенной форме. Так можно оптимизировать и ускорить работу ролика. Да и в PHP так же. Просто в текущем заказе ну никак не избежать, поэтому ты меня очень выручил. Ещё раз спасибо
![]() |
|
|||||
|
Модрон-ветеринар
|
Пожалуйста.
Цитата:
![]() Один большой конфиг, мне кажется, проще и легче использовать, чем набор маленьких (как минимум это снижает количество запросов браузера к серверу).
__________________
Идите первым! |
|
|||||
|
Регистрация: Apr 2007
Сообщений: 57
|
Цитата:
А если каждая маленькая флешка будет спрашивать у каждого маленького xml, то, имхо, работать будет всё быстрее... |
![]() |
![]() |
Часовой пояс GMT +4, время: 20:39. |
|
|
« Предыдущая тема | Следующая тема » |
|
|