Mar 12
在前面的Flex中利用SimpleXMLDecoder类将XML转化为对象(objects),我们看到了如何利用SimpleXMLDecoder类和decodeXML()事件,将一个XML的instance转为一个对象的instance。
下面的例子展示了如何利用Flex的SimpleXMLEncoder类和encodeValue()事件将一组对象(objects)转为XML对象。
下面是具体的例子以及源代码:
Download: main.mxml
- <?xml version="1.0" encoding="utf-8"?>
- <!-- http://blog.flexexamples.com/2008/03/04/converting-objects-to-xml-packets-using-the-simplexmlencoder-class-in-flex/ -->
- <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
- layout="vertical"
- verticalAlign="middle"
- backgroundColor="white"
- creationComplete="init();">
- <mx:ArrayCollection id="arrColl">
- <mx:source>
- <mx:Array>
- <mx:Object c1="1.A" c2="1.B" />
- <mx:Object c1="2.A" c2="2.B" />
- <mx:Object c1="3.A" c2="3.B" />
- <mx:Object c1="4.A" c2="4.B" />
- <mx:Object c1="5.A" c2="5.B" />
- <mx:Object c1="6.A" c2="6.B" />
- </mx:Array>
- </mx:source>
- </mx:ArrayCollection>
- <mx:Script>
- <![CDATA[
- import mx.rpc.xml.SimpleXMLEncoder;
- import mx.utils.ObjectUtil;
- private function init():void {
- var xml:XML = objectToXML(arrColl.source);
- textArea1.text = ObjectUtil.toString(arrColl.source);
- textArea2.text = xml.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());
- // trace(xml.toXMLString());
- return xml;
- }
- ]]>
- </mx:Script>
- <mx:HDividedBox width="100%" height="100%">
- <mx:TextArea id="textArea1"
- editable="false"
- width="100%"
- height="100%" />
- <mx:TextArea id="textArea2"
- editable="false"
- width="100%"
- height="100%" />
- </mx:HDividedBox>
- </mx:Application>
下面是执行实例(可以右键察看源代码):
原文作者:Peter deHaan 翻译:minidxer
