如何获取XML节点上的所有属性

时间:2011-11-28 05:12:07

标签: xml actionscript-3 flex

如何获取XML节点上存在的所有属性?例如,我有以下XML:

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

我想在默认节点上获取名称和值。

以下是一些入门代码:

if (item.defaults) {
    var attributes:Object = item.defaults.@*; // 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);
    }
}

4 个答案:

答案 0 :(得分:3)

我能想到的最短的一个:

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

答案 1 :(得分:1)

这应该是你要去的:

for each (var k:XML in xml.defaults.@*)
{
    trace(k.name(), k.toXMLString());
}

祝你好运!

答案 2 :(得分:1)

如果您愿意,可以将XML转换为Object

 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转换为Object的函数,您只需要将XML作为字符串传递,它将返回Object ..现在,您可以轻松地从Object获取数据。

答案 3 :(得分: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); 
    }
}