Converting XML to objects using the Flex SimpleXMLDecoder class

by Peter deHaan on September 19, 2007

in HTTPService, SimpleXMLDecoder, XML, XMLDocument

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.

View MXML

<?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>

View album.xml

<?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 }

1 tim yang November 7, 2007 at 3:58 am

very usefull thanks!!!!1!

Reply

2 duivvv March 5, 2008 at 2:15 am

how do attributes get filled in on the objects ?

for instance

if i’ll One

can i access it by resultObj.album.id ?

Reply

3 marco May 6, 2008 at 9:00 pm

creationComplete="serv.send();" ??

where is the serv.send(); function on the script ?? is it a special code ?

Reply

4 peterd May 7, 2008 at 5:16 pm

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 creationComplete event is calling the HTTPService tag’s send() method, which should trigger the result or fault events which in turn calls the serv_result() or serv_fault() methods.

Peter

Reply

5 alex August 26, 2008 at 1:48 pm

how can i access a with dashes like ? i receive Flex: 1120: Access of undefined property size…

Reply

6 alex August 26, 2008 at 1:49 pm

^^ tag like font-size

Reply

7 peterd August 28, 2008 at 1:14 am
8 mike December 6, 2008 at 6:23 am

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!

Reply

9 Adam J. December 31, 2008 at 6:30 am

Very useful post. Thank you. Was sick of getting ‘non-bindable’ warnings.

Reply

10 Jacob P April 13, 2009 at 8:05 am

Does this also work with a Number? just convert the String to a Number?

Reply

11 John February 9, 2010 at 10:00 am

i would like to deserialize my xml into a specific object type (rather than Object). Thoughts?
Thanks !

Reply

Leave a Comment

Sorry, this blog is terrible at eating HTML comments.
If you're pasting any HTML/XML/MXML code, you need to convert your < characters to &lt; and your > characters to &gt; .

You can use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">

Anti-Spam Protection by WP-SpamFree

Previous post:

Next post: