2009-05-19 69 views
1

我正在尋找一種高效且可重用的方式將xml解析到actionscript2中的對象中。 XML結構本身可能會發生變化,所以重要的是不能通過「硬編碼」特定節點來解析xml。在Actionscript 2中遞歸解析XML

我通常使用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.itemnull ...並不是說as2會抱怨,如果你訪問null的屬性,但仍然,這是相當uggly ..

e4x似乎是從ECMA世界中遍歷XML對象的最佳方法......經過一番思考,我將一個小小的(非常有趣的)庫放在一起:http://code.google.com/p/as24x/ 你可以找到關於谷歌其他圖書館雖然,支持更多的功能......這是相當有關語法...

希望這有助於;)

格爾茨

back2dos