2011-11-28 68 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); 
    } 
} 
相关问题