Search the web
Sign In
New User? Sign Up
flexcoders · RIA Development with Adobe Flex
? Already a member? Sign in to Yahoo!

Yahoo! Groups Tips

Did you know...
Hear how Yahoo! Groups has changed the lives of others. Take me there.

Best of Y! Groups

   Check them out and nominate your group.
Having problems with message search? Fill out this form to ensure your group is one of the first to be migrated to the new message search system.

Messages

  Messages Help
Advanced
E4X in Flex 2.0, part 1: Reading XML   Message List  
Reply | Forward Message #15305 of 150547 |

As you may have gathered, we've been spending a lot of time lately leveraging the new features of the Flash Player in the new Flex application model. Naturally, you'll also be able to leverage those same new features, so we thought we'd start giving you a run down of what's new. Of course we don't have beta software for you to play with yet, so for now, we'll provide a lot of detail so you can evaluate these new features and give guidance for us.

 

XML manipulation in Flex 2.0 is going to get a lot more powerful, as well as faster. By the time that Flex 2.0 ships, the Flash Player will support E4X ("ECMAScript for XML"), a set of programming language extensions adding native XML support to ECMAScript. The player team is busy implementing Standard ECMA-357 as described in http://www.ecma-international.org/publications/standards/Ecma-357.htm.

 

Here's how the spec describes what this feature offers: "E4X adds native XML datatypes to the ECMAScript language, extends the semantics of familiar ECMAScript operators for manipulating XML objects and adds a small set of new operators for common XML operations, such as searching and filtering. It also adds support for XML literals, namespaces, qualified names and other mechanisms to facilitate XML processing."

 

Lets take a look at a few examples of how you can read XML data using E4X.

 

As in the current player, you'll be able to create variables of type XML by parsing a String. But XML literals will now be supported as well:

 

    var employees:XML =
        <employees>
            <employee ssn="123-123-1234">
                <name first="John" last="Doe"/>
                <address>
                    <street>11 Main St.</street>
                    <city>San Francisco</city>
                    <state>CA</state>
                    <zip>98765</zip>
                </address>
            </employee>
            <employee ssn="789-789-7890">
                <name first="Mary" last="Roe"/>
                <address>
                    <street>99 Broad St.</street>
                    <city>Newton</city>
                    <state>MA</state>
                    <zip>01234</zip>
                </address>
            </employee>
        </employees>;

 

Instead of using DOM-style APIs like firstChild, nextSibling, etc., with E4X you just "dot down" to grab the node you want. Multiple nodes are indexable with [n], similar to the elements of an Array:

 

    trace(employees.employee[0].address.zip);

    ---

    98765

 

To grab an attribute, you just use the .@ operator:

 

    trace(employees.employee[1].@ssn);
    ---

    789-789-7890

 

If you don't pick out a particular node, you get all of them, as an indexable list:

 

    trace(employees.employee.name);

    ---

    <name first="John" last="Doe"/>

    <name first="Mary" last="Roe"/>

 

(And note that nodes even toString() themselves into formatted XML!)

 

A handy double-dot operator lets you omit the "path" down into the XML expression, so you could shorten the previous three examples to

 

    trace(employees..zip[0]);

    trace(employees..@ssn[1]);

    trace(employees..name);

 

You can use a * wildcard to get a list of multiple nodes or attributes with various names, and the resulting list is indexable:

 

    trace(employees.employee[0].address.*);

    ---

    <street>11 Main St.</street>

    <city>San Francisco</city>

    <state>CA</state>

    <zip>98765</zip>

    trace(employees.employee[0].name.@*[1]);
    ---

    Doe

 

You don't have to hard-code the identifiers for the nodes or attributes... they can themselves be variables:

 

    var whichNode:String = "zip";
    trace(employees.employee[0].address[whichNode]);

    ---

    98765

 

    var whichAttribute:String = "ssn";
    trace(employees.employee[1].@[whichAttribute]);
    ---

    789-789-7890

 

A new for-each loop lets you loop over multiple nodes or attributes:

 

    for each (var ssn:XML in employees..@ssn)

    {

        trace(ssn);

    }

    ---

    123-123-1234
    789-789-7890

 

Most powerful of all, E4X supports "predicate filtering" using the syntax .(condition), which lets you pick out nodes or attributes that meet a condition you specify using a Boolean expression. For example, you can pick out the employee with a particular social security number like this, and get her state:

 

    var ssnToFind:String = "789-789-7890";
    trace(employees.employee.(@ssn == ssnToFind)..state);
    ---

    MA

 

Instead of using a simple conditional operator like ==, you can also write a complicated predicate filtering function to pick out the data you need.

 

By the way, although none of my examples use XML namespaces, E4X has complete support for them.

 

Compared with the current XML support in the Flash Player, E4X allows you to write less code and execute it faster because more processing can be done at the native speed of C++.

 

Since E4X is so powerful, we're working to make Flex 2.0 play nicely with it. Components like List, ComboBox, and DataGrid will be able to accept E4X expressions like employees..name as a dataProvider. The <mx:XML> tag will be able to declare an E4X-style XML object in MXML. WebService and HTTPService will be able to deliver E4X-style XML objects across the wire, and they'll use the speed of E4X to do their own work (such as constructing and desconstrucing SOAP packets) faster.

 

For backward compability, the new player will continue to support the old-style XML and XMLNode objects, with the one change that the old XML class will be renamed to XMLDocument. The renaming is necessary because the E4X standard specifies that the new type be called XML. So if you have XML code and you want to continue using, just use XMLDocument instead. But we'll be encouraging everyone to migrate to E4X because it is so much simpler, faster, and more expressive.

 

Please let us know whether you'll find E4X useful in your particular applications.

 

- Gordon


 


 

 



Tue May 17, 2005 11:53 pm

gsmithsf
Online Now Online Now
Send Email Send Email

Forward
Message #15305 of 150547 |
Expand Messages Author Sort by Date

As you may have gathered, we've been spending a lot of time lately leveraging the new features of the Flash Player in the new Flex application model....
Gordon Smith
gsmithsf
Online Now Send Email
May 17, 2005
11:53 pm

This is very exciting! I'm especially excited about the double-dot and wildcard operators. Thanks for this update, as it'll help with planning for future...
Jeff Beeman
alemtris
Offline Send Email
May 18, 2005
12:04 am

MessageThe ability to choose sub-nodes within an XML document vs. just the XML document itself for a <mx:XML> is great since sometimes I'd like to use the...
JesterXL
jesterxl@...
Send Email
May 18, 2005
12:04 am

Oops... I meant to send this to an internal group, not to flexcoders. Enjoy the information, but, for now, don't expect this level of detail about our future...
Gordon Smith
gsmithsf
Online Now Send Email
May 18, 2005
12:15 am

ROFL! Come on Gordon! If you are going to accidentally leak info, can you make it a bit juicier? ;) Maybe something about some super-secret project or the...
James Ward
jennyandjame...
Offline Send Email
May 18, 2005
12:24 am

I don't suppose we'll be reading part 2 of this email via FlexCoders then. ;-) _____ From: flexcoders@yahoogroups.com [mailto:flexcoders@yahoogroups.com] On ...
Hans Omli
hansomli@...
Send Email
May 18, 2005
3:01 am

heheheheheheh thats funny. I had to do a double take and thought "am i reading the right list here or..." Nice work ;) ... -- Regards, Scott Barnes ...
Scott Barnes
spidaweb
Offline Send Email
May 18, 2005
4:13 am

OK, OK. Next time I'll try to leak something that will get me fired. Somebody on the list can give me a job as a Flex developer. - Gordon ... From:...
Gordon Smith
gsmithsf
Online Now Send Email
May 18, 2005
12:31 am

That is flat out increadible. I can't wait! Jeff http://www.flexauthority.com ... From: "Jeff Beeman" <jeffrey.beeman@...> To: <flexcoders@yahoogroups.com>...
Jeff Steiner
jeff@...
Send Email
May 18, 2005
4:12 am

Development time on my current project would be reduced considerably (as much as half) if I had access to this type of functionality. The $64M question...WHEN...
Dave
csgexec
Offline Send Email
May 18, 2005
1:30 pm

Thanks Gordon, It sounds great - esp. with regard to attributes and the filtering. <snip> WebService and HTTPService will be able to deliver E4X-style XML ...
Jonathan Bezuidenhout
jonbez
Offline Send Email
May 18, 2005
2:39 pm

HOW DO I JOIN THE FLEX.NET ALPHA/BETA TEST GROUP????????? :-) ________________________________ From: flexcoders@yahoogroups.com...
Tolulope Olonade
tolonade
Offline Send Email
May 18, 2005
6:56 am

You have to know the secret handshake, aswell as perform a series of trials ..i call them rights of flex-passage :) heh, umm i think they aren't even at the...
Scott Barnes
spidaweb
Offline Send Email
May 18, 2005
9:37 am

There is nothing active in our Flex.NET forums right now so don't worry about it :-) _____ From: flexcoders@yahoogroups.com [mailto:flexcoders@yahoogroups.com]...
Matt Chotin
m_chotin
Online Now Send Email
May 18, 2005
4:25 pm

We've said many times now that there is no public date available on Flex 2 including beta. But as David Mendels has said before, it's still a ways out. Matt ...
Matt Chotin
m_chotin
Online Now Send Email
May 18, 2005
4:34 pm

Ha ha.. :-) I was wondering why you were being so open about this stuff! No harm done, and it's only a taste of some of the great stuff we're thinking about,...
Sho Kuwamoto
skuwamoto
Online Now Send Email
May 19, 2005
5:22 pm
Advanced

Copyright © 2009 Yahoo! Inc. All rights reserved.
Privacy Policy - Terms of Service - Guidelines - Help