2009-05-19 2 views
1

Я ищу эффективный и многоразовый способ разбора xml в объект в actionscript2. Сама структура xml может измениться, поэтому важно, чтобы им удалось проанализировать xml с конкретными узлами «жесткого кодирования» и т. Д.Рекурсивный синтаксический анализ XML в Actioncript 2

Обычно я использую As3 и не нуждаюсь в чем-то подобном, так как класс XML прост в использовании сверните вниз. Ниже представлен псевдокод AS3 того, что я пытаюсь выполнить.

public function XmlObject(myXmlObject:XML,_node:String):Object 
    { 
     var xmlObj:Object=new Object(); 

     for(var node:uint=0;node<myXmlObject[_node].children().length();node++) 
     { 
      var attributesList:XMLList=myXmlObject[_node].children()[node].attributes(); 
      var nodeName:String=myXmlObject[_node].children()[node].name(); 

      switch(attributesList.length()>1) 
      { 
       ////////////////////// 
       case false: 
       ////////////////////// 
       { 
        for each(var attribute:XML in attributesList) 
        { 
        xmlObj[nodeName]=attribute; 
        } 
       break; 


       ////////////////////// 
       case true: 
       ////////////////////// 
       var values:Array=[]; 
       for each(attribute in attributesList) 
       { 
        values.push(attribute); 
        xmlObj[nodeName][String(attribute.name())]=attribute; 
       } 
       break; 
      } 
     } 
    return xmlObj; 
    } 

Заранее благодарю за помощь!

ответ

1

Я не совсем понял ваш псевдокод ... что происходит с массивом values? кажется, просто отбрасывается ... тоже, кажется, не быть рекурсивным ...

проблема в том, что семантика XML и ECMA-объектов отличается ...

что бы вы карту это к?

<cart><item /><item /></cart> 

а затем, что бы это было?

<cart><item /><cart> 

и что это?

<cart /> 

проблема в том, что в первом случае, у вас есть массив, во втором свойстве, в третьем ничего ... так что вы не можете знать, какие cart.item будет ... даже если вы скажете, что отдельные дочерние узлы будут обернуты в массив, у вас все равно не будет записи, и, следовательно, cart.item будет ... не то, что as2 будет жаловаться, если вы получите доступ к свойствам null, но все же это довольно uggly ..

e4x кажется лучшим способом перемещения объектов XML из мира ECMA ... после небольшого размышления я собрал небольшую (довольно взломанную) библиотеку: http://code.google.com/p/as24x/ вы можете найти другие библиотеки на Google, хотя, которые поддерживают больше возможностей ... это скорее о синтаксисе ...

надеюсь, что это помогает;)

Greetz

back2dos

 Смежные вопросы

  • Нет связанных вопросов^_^