3

在 Flex 中,很容易通过使用将 XML 转换为 Object 和 ArrayCollection

var decoder:SimpleXMLDecoder = new SimpleXMLDecoder();
decoder.decodeXML( xml );

但是有没有一种将 ArrayCollection 转换为 XML 的好方法。我在互联网上搜索了一段时间,但没有找到任何答案。

谢谢。

4

3 回答 3

4

看看这个使用 SimpleXMLEncoder 的例子:

<mx:Script>
    <![CDATA[

        import mx.rpc.xml.SimpleXMLEncoder;
        import mx.utils.ObjectUtil;
        import mx.utils.XMLUtil;
        import mx.collections.ArrayCollection;

        private var items:ArrayCollection;

        private function onCreationComplete():void
        {
            var source:Array = [{id:1, name:"One"}, {id:2, name:"Two"}, {id:3, name:"Three"}];
            var collection = new ArrayCollection(source);

            trace(objectToXML(collection.source).toXMLString());
        }

        private function objectToXML(obj:Object):XML 
        {
            var qName:QName = new QName("root");
            var xmlDocument:XMLDocument = new XMLDocument();
            var simpleXMLEncoder:SimpleXMLEncoder = new SimpleXMLEncoder(xmlDocument);
            var xmlNode:XMLNode = simpleXMLEncoder.encodeValue(obj, qName, xmlDocument);
            var xml:XML = new XML(xmlDocument.toString());

            return xml;
        }

    ]]>
</mx:Script>

...生成以下 XML:

<root>
  <item>
    <id>1</id>
    <name>One</name>
  </item>
  <item>
    <id>2</id>
    <name>Two</name>
  </item>
  <item>
    <id>3</id>
    <name>Three</name>
  </item>
</root>

我应该注意到从 Peter de Haan 的博客中获得了 objectToXML 函数,但是人们显然对 SimpleXMLEncoder 类有一些问题。在我自己的测试中,编码简单对象效果很好(如上所述),但复杂类型往往会产生不可预知的结果。(例如,对 Font 对象数组进行编码会产生一长串空项目节点。)

但是根据您尝试序列化的类型,这种方法可能适合您。希望能帮助到你!

于 2009-07-24T12:58:57.357 回答
1

为什么不用 SimpleXMLEncoder 转换 ArrayCollection 的 toArray() 方法返回的数组呢?

于 2009-07-24T12:17:30.620 回答
0

您可以尝试使用接受对象并将其转换为 xml 的 descibeType() 方法 - 但是我认为这只是转换类大纲?虽然可能是一个开始。

于 2009-07-24T20:47:12.290 回答