разбираемся с ХМЛ @ DeForum.ru
DeДверь  
Логин:  
Пароль:  
  Автологин  
   
Разместить рекламу
Письмо админу
Правила | FAQ | *Поиск | Наша команда | Регистрация | Вход
 
 
 Страница 1 из 1 [ Сообщений: 32 ] 
*   Список форумов / Технологии изображения / Flash » ответить » создать топик « | »
Автор Сообщение
eddy444 Муж.
Модератор
315
Сообщения: 14467
Зарегистрирован: 05.05.03
Откуда: NSK
Заголовок сообщения: разбираемся с ХМЛ
Сообщение Добавлено: 23 Май 2008, 12:22:46 
пытаюсь освоить потихоньку, на текущий момент имею вот что,
для парсинга использую готовый класс:

Код:
class XML2Obj {
   static function toObj(x){
      //trace(x.toString())
      var obj = {}
      if (x.childNodes.length>0){
      for (var v=0; v<x.childNodes.length; v++){
            var o = x.childNodes[v]
            var n = o.nodeName
            if (n==undefined){
               obj._$text = o.nodeValue
            }else{
               if (obj[n]==undefined) obj[n] = []
               obj[n].push(toObj(o))
            }
         }
      }
      for (var v in x.attributes){
         obj[v] = x.attributes[v]
      }
      //trace(obj)
      return obj
   }
}


во флэше соответственно

Код:
stop();
_root.myXML = new XML();//определяем место под ХМЛ
myXML.ignoreWhite = true;//пропуск пробелов.
_root.myXML.load("_xml/ru_data.xml");//путь к нашему ХМЛ
//загружаем ХМЛ, если загрузился - парсим его в массив
_root.myXML.onLoad = function(success) {
   if (success) {
      _root.myXMLObj = XML2Obj.toObj(this);
      //определяем количество разделов
      //_root.razdelquant = _root.myXMLObj.razdel.length;
      play();
      
   }
};
//Функция назначения текстовым полям сождержимого из элементов массива.
function setVars() {
   _root.pagelink = _root.myXMLObj.razdel[_root.rzdnum].mainText[_root.textnum].pagelink;
   text_title.text =  _root.myXMLObj.razdel[_root.rzdnum].mainText[_root.textnum].titl;
   text_about.text =  _root.myXMLObj.razdel[_root.rzdnum].mainText[_root.textnum].about;
   text_data.text = _root.myXMLObj.razdel[_root.rzdnum].mainText[_root.textnum].dat;
   
}



в итоге из ХМЛ вида

Код:
<razdel razdel_id="about" razdeltitle="Кто здесь?">
   <mainText
   titl="Вася П"
   about="траляля"
   dat="09.1999"
   pagelink="about.html"
   />
</razdel>


все нормально грузится и работает. Теперь пытаюсь это все дело привести к виду, чтоб содержимое было в тегах самого узла, а не атрибутах

Код:
<razdel razdel_id="sites" razdeltitle="сайты">
   
   <mainText>
      <titl>Фирма зашибись</titl>
      <about>сайт такойто</about>
      <dat>13.09.99</dat>
      <pagelink>sites/zashbiz.html</pagelink>
   </mainText>
   
      <mainText>
      <titl>Фирма отвали</titl>
      <about>сайт сякойто</about>
      <dat>13.09.99</dat>
      <pagelink>sites/otval.html</pagelink>
   </mainText>
   
</razdel>


(чтобы в итоге использовать узлы типа CDATA)

как мне теперь получить доступ к содержимому узла?

В парсере за содержимое похоже отвечает переменная
_$text

куда я только её не тыкал - не пашет, "андефайнд" в текстовых полях и при трейсе
AgA-1 Муж.
участник
26
Сообщения: 1526
Зарегистрирован: 04.10.02
Откуда: TGN
Сообщение Добавлено: 23 Май 2008, 17:19:41 
Код:
for (var bNode:XMLNode = (родитель).firstChild; bNode != null; bNode = bNode.nextSibling)

bNode — переменная ветвь, которая принимает новое значение каждую итерацию, просматривает все содержимое (родителя)
Самый гуманный на мой взгляд метод перебора внутренностей ветки, хотя конечно может быть я не до конца вник в суть проблемы.
AgA-1 Муж.
участник
26
Сообщения: 1526
Зарегистрирован: 04.10.02
Откуда: TGN
Сообщение Добавлено: 23 Май 2008, 17:23:44 
Ну и если воспользоваться хитрым программистским маневром при помощи этого же цикла for, он же while, можно создать рекурсивную функцию, но только я не до конца понял зачем парсить объект XML, когда он уже в принципе довольно удобен для использования или нет?
eddy444 Муж.
Модератор
315
Сообщения: 14467
Зарегистрирован: 05.05.03
Откуда: NSK
Сообщение Добавлено: 23 Май 2008, 17:26:32 
суть такая, как мне с помощью упомянутого XML2Obj присвоить текстовому полю не атрибуты нода как тут:

<mainText titl="Вася П" about="траляля" dat="09.1999" pagelink="about.html"
/>

а "сам нод", как тут:


<mainText>
<titl>Вася П</titl>
<about>траляля</about>
<dat>09.1999</dat>
<pagelink>about.html</pagelink>
</mainText>


вот сам ХМЛ не удобен - там же чайлды какието - а в обьекте уже структура осмысленно поименованная.

"рекурсивная" - это для меня ругательство :) иначе бы я этот топик не завел. Мне бы пальцем показать.
То ись указанный класс - это не я писал и вообще не понимаю как он работает.
AgA-1 Муж.
участник
26
Сообщения: 1526
Зарегистрирован: 04.10.02
Откуда: TGN
Сообщение Добавлено: 23 Май 2008, 17:43:51 
Решил до конца вникнуть в суть проблемы... и...
парсер нафик не нужен :) объясню почему, допустим так случиться что вам прийдется отправлять серверу в обратку то что нашпиляли во флеше, придется депарсить по новой, оно нам надо? поэтому делаем так.
у папаши myXML отрываем ребеночка
ourNode:XMLNode = myXML.firstChild (может быть myXML.firstChild.firstChild ((проверяйте трейсом)))
и так как у нас уже есть номер раздела, то!
ourNode.childNodes(_root.rzdnum) - это наш ребеночек-веточка нужный(по идее..)
в него мы внедряемся выше описанным циклом, или проще если у нас в XML все позиции строги как в армии
ourNode.childNodes(_root.rzdnum).childNodes[1].nodeName — titl
ourNode.childNodes(_root.rzdnum).childNodes[1].nodeValue— Содержимое titl... только и всего.
ну и далее меняем цифру 1 на последующие 2 3 и 4. чтобы пройтись по всем позициям содержимого.
Опять же настаиваю на том, что этот ваш парсер в классе вреден для здоровья.
Еще есть витееватая idMap, которая готова прибежать нам на помощь, но она работала у меня как-то через раз, наверное я кривоват )) Ну и напоследок, забавное чтиво по теме

А и кстати, метод загрузки XML стоит объявить после того как мы описали функцию событию onLoad, вроде всё равно, но так гуманнее. Этакий олдскул ) т.е. если недогрузился кусок кода флеша в функции а лоад уже сработал и загрузился, звучит зверски неправдоподобно, но ВДРУГ ))))
eddy444 Муж.
Модератор
315
Сообщения: 14467
Зарегистрирован: 05.05.03
Откуда: NSK
Сообщение Добавлено: 23 Май 2008, 18:08:45 
без парсера оно и так все понятно, мне то как раз с парсером хочется.
В свое время адаптировал кучу сложных сайтов для БМВ - там везде аналогичный парсер ,только контент весь в атрибуты они пихали, соотвественно спец символы - наборами, что какбы некрасиво и неправильно.
AgA-1 Муж.
участник
26
Сообщения: 1526
Зарегистрирован: 04.10.02
Откуда: TGN
Сообщение Добавлено: 23 Май 2008, 18:39:35 
Ну если парсер обязательное условие, тогда вам необходимо его немного адаптировать под задачу.
Делаем внутри рекурсивную функцию...
Вставляем вот эту намазолившую глаза ересь
Код:
for (var routNode:XMLNode = (родитель).firstChild; routNode != null; routNode = routNode.nextSibling)


Вместо вашего (или не вашего)
Код:
for (var v=0; v<x.childNodes.length; v++){

Теперь когда мы натыкаемся на ветку родитель, нам нужно заново запустить цикл уже внутри нее, т.е. мы проверяем на отцовство routNode.nodeType, параметр, который нам об этом расскажет, и запускаем функцию по новой но уже с родителем routNode (т.е.
if nodeType=="ветка_папка" тогда пускаем функцию заново с параметром ветки родителя...
Не забываем, что все повторные назначения типа rout2Node=routNode это всего лишь создание ссылки, а не копирование объекта (спасибо и на этом)), а следовательно в нашем создаваемом объекте нам нужно тоже раскинуть ветви шире. и следовательно мы запоминаем в какую-нибудь еще одну переменную текущий объект. Как-то так. Подробнее написать есть написать код. Старался написать подробнее, но устал, конец рабочего дня. Если что-то до сих пор не стало ясно, я напишу еще, когда освежусь. :)
eddy444 Муж.
Модератор
315
Сообщения: 14467
Зарегистрирован: 05.05.03
Откуда: NSK
Сообщение Добавлено: 23 Май 2008, 19:01:30 
а почему так сложно? Парсер уже все обходит как надо, с любой вложенностью. Атрибуты берет, нельзя ли просто чтото чуть поправить чтоб видимо nodeValue из него выводился так же, как сейчас атрибут.
AgA-1 Муж.
участник
26
Сообщения: 1526
Зарегистрирован: 04.10.02
Откуда: TGN
Сообщение Добавлено: 23 Май 2008, 20:24:51 
содержимое функции класса (toObj), хотя для теста я сделал просто функцию...

Код:

   var obj:Object = {};
   var kimo=0;
   
//   if (x.childNodes.length>0) {
   // Вместо этого бреда вставляем адекватный говор:
   if (x.hasChildNodes()) {
//И вместо того фора, вставляем мой любимый этот ))))
      for (var b:XMLNode = x.firstChild; b != null; b = b.nextSibling){
         

//         var o = b; // заменяем последствия ужасного цикла: бред да? поэтому вместо замены будем использовать просто b:
//         var n = b.nodeName; // да и тут тоже, чего греха таить ))
         
         /*
         Это про nodeType
         Integer value/
 Defined constant
 1 ELEMENT_NODE
 2 ATTRIBUTE_NODE
 3 TEXT_NODE
 4 CDATA_SECTION_NODE
 5 ENTITY_REFERENCE_NODE
 6 ENTITY_NODE
 7 PROCESSING_INSTRUCTION_NODE
 8 COMMENT_NODE
 9 DOCUMENT_NODE
 10 DOCUMENT_TYPE_NODE
 11 DOCUMENT_FRAGMENT_NODE
 12 NOTATION_NODE
 
Таким образом мы избегаем корявых случаев, во :)
         */
         //trace(b + " " + b.nodeName + " " + b.nodeType);
         if (b.nodeType==3) {
//            впихаем суть в содержание ))
            obj = b.nodeValue;
            

         }
         if (b.nodeType==1) {
            /*просто если nodeType - 1, то у ветки по любому есть имя.
            (obj[b.nodeName] == undefined) {
               obj[b.nodeName] = [];
            создаем если не создано.… НО!!!!!! БАБАХ!!!
            
               <mainText>
      <titl>Фирма зашибись</titl>
      <about>сайт такойто</about>
      <dat>13.09.99</dat>
      <pagelink>sites/zashbiz.html</pagelink>
   </mainText>
          <mainText>
       
        тег mainText, повторился дважды, а значит он не будет создан как отдельный объект, и все атрибуты и содержимое перекроют поверх содержимое предыдущего такого же...
        поэтому для случаев повтора мы врубили счетчик... а так как мы врубили объект вместо масива то нам больше не нужны строки с пустыми скобками вот так хм...
            */

            if (obj[b.nodeName] != undefined) {
               kimo++;
               obj[b.nodeName+kimo]=toObj(b);      
            }else{
               obj[b.nodeName] = toObj(b);      
            }
            // а вот и рекурсия которую я просмотрел в прошлые посты ))) внутри push вызывается вот эта вся функция
         }
      }
   }
   // а тут оставим всё как есть :)
   for (var v in x.attributes) {
      obj[v] = x.attributes[v];
   }
 
   return obj;
}
AgA-1 Муж.
участник
26
Сообщения: 1526
Зарегистрирован: 04.10.02
Откуда: TGN
Сообщение Добавлено: 23 Май 2008, 20:27:32 
версия без матов... )
Код:
   var obj:Object = {};
   var kimo=0;
   if (x.hasChildNodes()) {
      for (var b:XMLNode = x.firstChild; b != null; b = b.nextSibling){
         if (b.nodeType==3) {
            obj = b.nodeValue;
         }
         if (b.nodeType==1) {
            if (obj[b.nodeName] != undefined) {
               kimo++;
               obj[b.nodeName+kimo]=toObj(b);      
            }else{
               obj[b.nodeName] = toObj(b);      
            }
         }
      }
   }
   for (var v in x.attributes) {
      obj[v] = x.attributes[v];
   }
   return obj;
AgA-1 Муж.
участник
26
Сообщения: 1526
Зарегистрирован: 04.10.02
Откуда: TGN
Сообщение Добавлено: 23 Май 2008, 20:32:04 
Проверять работу этого ужаса вот так вот:

trace(myXMLObj.razdel.mainText.titl);
trace(myXMLObj.razdel.mainText1.titl);

для более веселого понимания так:

for (var i in myXMLObj.razdel.mainText) {
trace(i+" = "+myXMLObj.razdel.mainText[i]);
}

от переменной _$text мы избавились, и поэтому сам объект если он просто тупой стал нести в себе текст. ))
в принципе парсер остался универсальным, но нахрен он нужен я так и не понял ))
еще мы врубили счетчик kimo, который освобождает нас от тихого ужаса который мог происходить у нас за спиной.
загвоздка была в том что прошлый класс создавал массив, а нам нужен было ОБЪЕКТ!

в любом случае, с вас eddy444, часть гонорара (всего лишь 20%). Шучу, конечно.))
eddy444 Муж.
Модератор
315
Сообщения: 14467
Зарегистрирован: 05.05.03
Откуда: NSK
Сообщение Добавлено: 23 Май 2008, 21:20:59 
да хоть 200 %
гонорар равен нулю :)))
я на реальных заказах предпочитаю не самообучатся :)

В любом случае большое спасибо, пригодится думаю не только мне.
AgA-1 Муж.
участник
26
Сообщения: 1526
Зарегистрирован: 04.10.02
Откуда: TGN
Сообщение Добавлено: 24 Май 2008, 10:34:00 

eddy444 писал(а):
я на реальных заказах предпочитаю не самообучатся :)


И это правильно, так или иначе при обучении все равно выходит слегка коряво или немного неверно.
У вас всё заработало?
Вчера уже в конце я обнаружил небольшую оплошность в нашем парсере,
поясню: если в тэг, вида <tits>4sized</tits> вставить отрибут, т.е. <tits owner="Monica">4sized</tits> то, аттрибут пропадет пропадом, потому что в нашем случае если тэг что-то содержит, то в объекте он становится просто переменной, а не объектом. obj = b.nodeValue; поэтому таки для универсальности стоит оставить ту самую переменную _$text, но назвать ее более человечным образом...
Поэтому меняем
Код:
obj = b.nodeValue;

на
Код:
obj.value = b.nodeValue;
value — переменная которая содержит текст.
Кстати, глупо что в нашей структуре аттрибуты называются таким же образом как и внутренние объекты, из за этого может возникнуть путанница или пересекающиеся названия, а для нас это недопустимо. Поэтому в названиях создаваемых внутри объекта переменных аттрибутов создадим префикс "_". просто и по флешевски ))
Код:
obj[v] = x.attributes[v]
поменяем на
Код:
obj["_" + v] = x.attributes[v]

теперь все аттрибуты будут названы в виде _attr1, _attr2
И в нашем примерчике
<tits owner="Monica">4sized</tits>
вместо таких справедливух равенств(это не приравнивание ))) object.tits=="4sized", у нас будет object.tits== (object Object), а object.tits._owner=="Monica" и соответственно object.tits.value=="4sized", вот такие пироги )
eddy444 Муж.
Модератор
315
Сообщения: 14467
Зарегистрирован: 05.05.03
Откуда: NSK
Сообщение Добавлено: 25 Май 2008, 19:50:16 
гм, а как динамически назначать номер раздела?
запись вида

myXMLObj.razdel[_root.rzdnum].mainText.titl.value
не пашет
AgA-1 Муж.
участник
26
Сообщения: 1526
Зарегистрирован: 04.10.02
Откуда: TGN
Сообщение Добавлено: 26 Май 2008, 10:31:34 
Код:
myXMLObj.razdel
myXMLObj.razdel1
myXMLObj.razdel2

myXMLObj.razdel._razdel_id …
myXMLObj.razdel._razdel_title …

myXMLObj["razdel" + _root.rzdnum].mainText.titl.value


тут еще зависит от вашей нумерации, как вы у себя в интерфейсе меняется РЖД нумер, от нуля или от еденицы...
оно должно в структуре соответствовать "", "1","2"… и т.д.
eddy444 Муж.
Модератор
315
Сообщения: 14467
Зарегистрирован: 05.05.03
Откуда: NSK
Сообщение Добавлено: 26 Май 2008, 11:02:57 
["razdel" + _root.rzdnum] - не работает, то есть такая запись вообще ошибкой считается.
AgA-1 Муж.
участник
26
Сообщения: 1526
Зарегистрирован: 04.10.02
Откуда: TGN
Сообщение Добавлено: 26 Май 2008, 11:42:06 
хм. у меня вот это:

Код:
_root.rzdnum="";
trace (myXMLObj["razdel" + _root.rzdnum].mainText.titl);
_root.rzdnum="1";
trace (myXMLObj["razdel" + _root.rzdnum].mainText.titl);


работает.
может быть у вас rzdnum — Number, тогда... ;
Код:
trace (myXMLObj["razdel" + rzdnum.toString()].mainText.titl);
eddy444 Муж.
Модератор
315
Сообщения: 14467
Зарегистрирован: 05.05.03
Откуда: NSK
Сообщение Добавлено: 26 Май 2008, 12:48:46 
конечно намбер, оно присваивается из переменной цикла каждой кнопке в момент генерации кнопки раздела, количество которых определяется количеством соотвествующих нод ХМЛ
AgA-1 Муж.
участник
26
Сообщения: 1526
Зарегистрирован: 04.10.02
Откуда: TGN
Сообщение Добавлено: 26 Май 2008, 13:14:30 
с toString() работает?
eddy444 Муж.
Модератор
315
Сообщения: 14467
Зарегистрирован: 05.05.03
Откуда: NSK
Сообщение Добавлено: 30 Ноябрь 2008, 12:21:16 
наконец дошли руки продолжить разбирательство.
строчка не работала из за лишней точки, работает вот так
titl.text = myXMLObj["razdel" + _root.rzdnum.toString()].titl;

теперь другая хрень - не определяется длинна массива.
ни
_root.myXMLObj.razdel.length
ни
_root. myXMLObj.firstChild.length;
неопределяются.

Кроме того как избежать
"", "1","2" ?
то есть нужен перебор элемента массива с первого а не с "безымянного".
Если поставить в цикле 1, то неработает обращение к 2му элементу. А безымянный все равно остается.
Punk T-34 Муж.
участник
1
Сообщения: 1265
Зарегистрирован: 17.02.06
Откуда: Бахрейн
Сообщение Добавлено: 2 Декабрь 2008, 20:16:15 
у меня везде undefined :insane:

_________________
• NORDSKILL •
eddy444 Муж.
Модератор
315
Сообщения: 14467
Зарегистрирован: 05.05.03
Откуда: NSK
Сообщение Добавлено: 3 Декабрь 2008, 08:39:37 
в общем определение "длинны массива"(количества разделов или работ в разделе) получается только при прямом обращении к ХМЛ типа
Код:
_root.myXML.childNodes.length

получается что myXMLObj теперь не массив?
eddy444 Муж.
Модератор
315
Сообщения: 14467
Зарегистрирован: 05.05.03
Откуда: NSK
Сообщение Добавлено: 3 Декабрь 2008, 22:52:24 
Короче это полный идиотизм.
Измучил упомянутые куски кода вдоль и поперек. В итоге - вернулся к изначальному, опубликованному в топике, доступ к nodeValue оказался прост до тупости
_root.myXMLObj.razdel[_root.rzdnum].mainText[_root.textnum].subtitl[0]._$text;
вот жеж.
Punk T-34 Муж.
участник
1
Сообщения: 1265
Зарегистрирован: 17.02.06
Откуда: Бахрейн
Сообщение Добавлено: 4 Декабрь 2008, 15:31:53 
eddy444, а как насчёт XPathAPI?..
После того, как я с ним познакомился (правда, не до конца ещё), задался вопросом: для чего мучаются с парсерами?

_________________
• NORDSKILL •
eddy444 Муж.
Модератор
315
Сообщения: 14467
Зарегистрирован: 05.05.03
Откуда: NSK
Сообщение Добавлено: 4 Декабрь 2008, 15:42:54 
не знаю не сталкивался.
Парсер мне лично нужен только для более удобного и наглядного, чем через "чайлды" обращения к текстовому массиву. Ведь в нем имена веток сам назначаешь и они могут соответствовать именам тегов ХМЛ и собсно структуре данных.
Punk T-34 Муж.
участник
1
Сообщения: 1265
Зарегистрирован: 17.02.06
Откуда: Бахрейн
Сообщение Добавлено: 4 Декабрь 2008, 16:36:55 
так вот…
более удобного и наглядного (внедрённого ещё, оказывается, в Mactomedia Flash 8 ) я не встречал:
Код:
import mx.xpath.XPathAPI;
var rssfeed_xml = new XML();
rssfeed_xml.ignoreWhite = true;
rssfeed_xml.onLoad = function(success) {
   if (success) {
      var titlePath:String = "/rss/channel/title"; //путь к конкретному месту в XML.
      title_array = mx.xpath.XPathAPI.selectNodeList(this.firstChild, titlePath);
      for (var i = 0; i<title_array.length; i++) {
         trace(title_array[i].firstChild.nodeValue); // показывает текст тега <title> (Flash-MX: News)
      }
      trace(title_array.length); // показывает количество выбранных элементов (1)
   } else {
      trace("error loading XML");
   }
};
rssfeed_xml.load("http://www.flash-mx.com/news/index.xml");

Сама документация здесь: http://download.macromedia.com/pub/docu … athAPI.pdf
А здесь нашёл "учебник" по синтаксису XPath: http://www.tizag.com/xmlTutorial/xpathtutorial.php

_________________
• NORDSKILL •
Punk T-34 Муж.
участник
1
Сообщения: 1265
Зарегистрирован: 17.02.06
Откуда: Бахрейн
Сообщение Добавлено: 4 Декабрь 2008, 16:41:16 
Елси в строчке
Код:
var titlePath:String = "/rss/channel/title";
написать
Код:
var titlePath:String = "/rss/channel/*";
, то
Код:
trace(title_array.length);
покажет "26" — это количество элементов внутри тега <title>. Но эти звёздочки и прочее, как раз таки особенности синтаксиса XPath, а там всего 10 знаков для изучения :cool:

_________________
• NORDSKILL •
eddy444 Муж.
Модератор
315
Сообщения: 14467
Зарегистрирован: 05.05.03
Откуда: NSK
Сообщение Добавлено: 4 Декабрь 2008, 16:50:12 
ок посмотрим на досуге.
Хотя пока я не вижу чтоб оно было кардинального удобнее чем
заголовок статьи.text = _root.myXMLObj.razdel[номер раздела].mainText[номер статьи в разделе].заголовок;
Punk T-34 Муж.
участник
1
Сообщения: 1265
Зарегистрирован: 17.02.06
Откуда: Бахрейн
Сообщение Добавлено: 4 Декабрь 2008, 16:57:52 

eddy444 писал(а):
ок посмотрим на досуге.
Хотя пока я не вижу чтоб оно было кардинального удобнее чем
заголовок статьи.text = _root.myXMLObj.razdel[номер раздела].mainText[номер статьи в разделе].заголовок;

eddy444, это с помощью xml2obj делается?

_________________
• NORDSKILL •
eddy444 Муж.
Модератор
315
Сообщения: 14467
Зарегистрирован: 05.05.03
Откуда: NSK
Сообщение Добавлено: 4 Декабрь 2008, 19:43:14 
Punk T-34, ну да, суть этого класса в преобразовании ХМЛ в упорядоченный "обьект-массив" причем обходится любая вложенность дерева ХМЛ.
Запись вида "/rss/channel/title" тоже конечно удобная.
Punk T-34 Муж.
участник
1
Сообщения: 1265
Зарегистрирован: 17.02.06
Откуда: Бахрейн
Сообщение Добавлено: 4 Декабрь 2008, 20:27:04 

eddy444 писал(а):
Запись вида "/rss/channel/title" тоже конечно удобная.

но нашёл большой минус: не читает атрибуты!! Может делать сортировку по атрибутам, тоесть использовать как фильтр, но не читает. :)

_________________
• NORDSKILL •
Punk T-34 Муж.
участник
1
Сообщения: 1265
Зарегистрирован: 17.02.06
Откуда: Бахрейн
Сообщение Добавлено: 4 Декабрь 2008, 23:44:17 

Punk T-34 писал(а):
но нашёл большой минус: не читает атрибуты!! Может делать сортировку по атрибутам, тоесть использовать как фильтр, но не читает. :)

нашёл палочку, которая зачёркивает минус и делает из него плюс: XPath4AS2 — класс, который действует на основе XPath ATI от Макромедии, только не такой кастрированный. Нормально воспринимает и атрибуты, и содержимое тегов.
Единственное нормальное описание синтаксиса, которое смог найти: http://www.ultrashock.com/blog/holaso/x … t-261.html

_________________
• NORDSKILL •
*   Список форумов / Технологии изображения / Flash « | » » ответить » создать топик
 Страница 1 из 1 [ Сообщений: 32 ] 
Показать сообщения за:   Поле сортировки  
Найти:
Перейти:  
Уровень доступа: Вы не можете начинать темы. Вы не можете отвечать на сообщения. Вы не можете редактировать свои сообщения. Вы не можете удалять свои сообщения. Вы не можете добавлять вложения.
cron


ООО ДеФорум
При использовании материалов сайта ссылка на DeForum.ru — обязательна.
Проект Павла Батурина ©2001-2077; // Powered by phpBB © 2013 phpBB Group
Rambler's Top100