Similar to the previous post, “Converting XML to objects using the Flex HTTPService MXML tag“, the following example shows how you can use the decodeXML() method in the SimpleXMLDecoder class to convert an XMLDocument object into an ActionScript Object object.
Full code after the jump.
<?xml version="1.0" encoding="utf-8"?>
<!-- http://blog.flexexamples.com/2007/09/19/converting-xml-to-objects-using-the-flex-simplexmldecoder-class/ -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
layout="vertical"
verticalAlign="middle"
backgroundColor="white"
creationComplete="serv.send();">
<mx:Script>
<![CDATA[
import mx.rpc.events.FaultEvent;
import mx.rpc.events.ResultEvent;
import mx.rpc.xml.SimpleXMLDecoder;
private function serv_result(evt:ResultEvent):void {
/* Convert XMLNode to XMLDocument. */
var xmlStr:String = evt.result.toString();
var xmlDoc:XMLDocument = new XMLDocument(xmlStr);
var decoder:SimpleXMLDecoder = new SimpleXMLDecoder(true);
var resultObj:Object = decoder.decodeXML(xmlDoc);
/* Assign the values... */
nameText.text = resultObj.album.name;
img0Text.text = resultObj.album.images.image[0];
img1Text.text = resultObj.album.images.image[1];
img2Text.text = resultObj.album.images.image[2];
}
private function serv_fault(evt:FaultEvent):void {
// Show the error label.
error.text += evt.fault.faultString;
error.visible = true;
// Hide the form.
form.visible = false;
}
]]>
</mx:Script>
<mx:String id="XML_URL">album.xml</mx:String>
<mx:HTTPService id="serv"
url="{XML_URL}"
resultFormat="xml"
result="serv_result(event);"
fault="serv_fault(event);" />
<mx:ApplicationControlBar dock="true">
<mx:Label text="{XML_URL}" />
</mx:ApplicationControlBar>
<mx:Label id="error"
color="red"
fontSize="36"
fontWeight="bold"
visible="false"
includeInLayout="{error.visible}"/>
<mx:Form id="form"
includeInLayout="{form.visible}">
<mx:FormItem label="resultObj.album.name:">
<mx:Label id="nameText" />
</mx:FormItem>
<mx:FormItem label="resultObj.album.images.image[0]:">
<mx:Label id="img0Text" />
</mx:FormItem>
<mx:FormItem label="resultObj.album.images.image[1]:">
<mx:Label id="img1Text" />
</mx:FormItem>
<mx:FormItem label="resultObj.album.images.image[2]:">
<mx:Label id="img2Text" />
</mx:FormItem>
</mx:Form>
</mx:Application>
<?xml version="1.0" encoding="utf-8"?>
<album>
<name>One</name>
<images>
<image>image1.jpg</image>
<image>image2.jpg</image>
<image>image3.jpg</image>
</images>
</album>
View source is enabled in the following example.

{ 11 comments… read them below or add one }
very usefull thanks!!!!1!
how do attributes get filled in on the objects ?
for instance
if i’ll One
can i access it by resultObj.album.id ?
creationComplete="serv.send();"??where is the
serv.send();function on the script ?? is it a special code ?marco,
Nope, no special code. Later in the code you should see the following MXML code:
<mx:HTTPService id="serv" url="{XML_URL}" resultFormat="xml" result="serv_result(event);" fault="serv_fault(event);" />Basically the
creationCompleteevent is calling the HTTPService tag’ssend()method, which should trigger theresultorfaultevents which in turn calls theserv_result()orserv_fault()methods.Peter
how can i access a with dashes like ? i receive Flex: 1120: Access of undefined property size…
^^ tag like font-size
alex,
Does this help at all? “Parsing XML nodes and Objects with dashes in their names in ActionScript 3.0″
Peter
good example m8! U really saved me, i was trying to put a variable in the end of the xml invoking string: xmlPath=XmlRequest.lastresult.data.list.path[i] but wasn’t getting anywhere. Ultil i saw your post.
good job and thnx!
Very useful post. Thank you. Was sick of getting ‘non-bindable’ warnings.
Does this also work with a Number? just convert the String to a Number?
i would like to deserialize my xml into a specific object type (rather than Object). Thoughts?
Thanks !