2011-11-28 66 views
1

如何獲取XML節點上存在的所有屬性?例如,我有以下XML:如何獲取XML節點上的所有屬性

<item id="100"> 
    <defaults width="10" height="100" post="true"> 
</item> 

我想獲取默認節點上的名稱和值。

下面是一些入門代碼:

if (item.defaults) { 
    var attributes:Object = [email protected]*; // found in another post 

    for each (var value:String in attributes) { 
     trace("value "+value); // prints 10,100,true 
    } 
    for (var property:String in attributes) { 
     trace("property "+property); // prints 0,1,2 - I need to know the names 
    } 
} 

我找到了答案:

if (item.defaults) { 
    attributes = item.defaults.attributes(); 
    attributesLength = attributes.length(); 
    defaults = {}; 

    for each (var attribute:Object in attributes) { 
     propertyName = String(attribute.name()); 
     defaults[propertyName] = String(attribute); 
    } 
} 
+0

謝謝大家解答吧! –

+0

每個人都得到星星 –

回答

3

最短的一個我能想到的:

var defaults : Object = {}; 
if (item.defaults) 
    for each (var att : XML in [email protected]*) 
     defaults["" + att.name()] = "" + att.valueOf(); 
+0

我標記你的答案是正確的,因爲你包含了將名字和值轉換爲字符串的代碼。沒有這個,在檢查數值和比較時會遇到一些問題。 –

1

這應該得到亞去:

for each (var k:XML in [email protected]*) 
{ 
    trace(k.name(), k.toXMLString()); 
} 

祝您好運!

1

如果你願意,你可以將XML轉換成對象

public function xmlToObject(value:String):Object 
     { 
       var xmlStr:String = value.toString(); 
       var xmlDoc:XMLDocument = new XMLDocument(xmlStr); 
       var decoder:SimpleXMLDecoder = new SimpleXMLDecoder(true); 
       var resultObj:Object = decoder.decodeXML(xmlDoc); 
       return resultObj; 
      } 

這是將XML轉換成對象的功能,你只需要通過XML作爲一個字符串,它將返回對象..現在它很容易爲你從對象獲取數據。

1

這工作:

var xml:XML = <item id="100"><defaults width="10" height="100" post="true"/></item>; 

if (xml.defaults) 
{ 
    var attributes:XMLList = xml.defaults.attributes(); 

    for each (var prop:Object in attributes) 
    { 
     trace(prop.name() + " = " + prop); 
    } 
} 
相關問題