2009-05-19 94 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