【问题标题】:How to get all attributes on an XML node如何获取 XML 节点上的所有属性
【发布时间】:2011-11-28 05:12:07
【问题描述】:

如何获取 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);
    }
}

【问题讨论】:

    标签: xml actionscript-3 apache-flex


    【解决方案1】:

    我能想到的最短的一个:

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

    【讨论】:

    • 我将您的答案标记为正确,因为您包含了将名称和值转换为字符串的代码。如果没有这个,检查值和比较就会出现一些问题。
    【解决方案2】:

    这应该让你继续前进:

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

    祝你好运!

    【讨论】:

      【解决方案3】:

      如果您愿意,可以将 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 获取数据。

      【讨论】:

        【解决方案4】:

        这行得通:

        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); 
            }
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-06-05
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多