2009-05-19 16 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でも...となりますあなたが言うならば、単一の子ノードが配列にラップされると、あなたはまだエントリがない可能性があります。したがって、nullのプロパティにアクセスするとas2は不平を言うでしょうが、これはまだかなりugglyです... はnullです。

e4xは、ECMAの世界からXMLオブジェクトをトラバースする最善の方法だと思われます... 少し考えた後、私は少し(かなりハッキーな)ライブラリをまとめました:0 )

greetz

back2dos

; あなたはこのことができます

希望...それはかなりの構文についてです...より多くの機能をサポートするものの、Googleで他のライブラリを、見つけることができます

関連する問題