1

我正在寻找一种有效且可重用的方法来将 xml 解析为 actionscript2 中的对象。xml 结构本身可能会发生变化,因此重要的是我能够在没有“硬编码”特定节点等的情况下解析 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;
    }

提前感谢您对此的任何帮助!

4

1 回答 1

1

我没有完全理解你的伪代码......数组会发生什么values?似乎被简单地丢弃了......而且,它似乎不是递归的......

问题是,XML 和 ECMA 对象的语义不同......

你会把它映射到什么?

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

然后,这会是什么?

<cart><item /><cart>

这是什么?

<cart />

问题是,在第一种情况下,你有一个数组,在第二种情况下,有一个属性,在第三种情况下什么都没有......所以你不知道,cart.item会是什么......即使你说,那个单个子节点将被包装到一个数组中,你仍然可以没有条目,因此cart.itemnull......如果你访问属性,as2 不会抱怨,null但是,这很丑陋......

e4x 似乎是从 ECMA 世界中遍历 XML 对象的最佳方式……经过一番思考,我整理了一个小(相当 hacky)库:http ://code.google.com/p/as24x/ 不过,您可以在 google 上找到其他支持更多功能的库……它与语法有关……

希望这可以帮助 ;)

问候

back2dos

于 2009-06-03T16:46:56.467 回答