That is flat out increadible.

I can't wait!

Jeff
http://www.flexauthority.com

----- Original Message ----- 
From: "Jeff Beeman" <[EMAIL PROTECTED]>
To: <flexcoders@yahoogroups.com>
Sent: Tuesday, May 17, 2005 5:04 PM
Subject: RE: [flexcoders] E4X in Flex 2.0, part 1: Reading XML


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 projects.  Keep 'em coming!

 

 

/******************************************
* Jeff Beeman
******************************************/

  _____  

From: flexcoders@yahoogroups.com [mailto:[EMAIL PROTECTED] On
Behalf Of Gordon Smith
Sent: Tuesday, May 17, 2005 4:54 PM
To: 'flexcoders@yahoogroups.com'
Subject: [flexcoders] E4X in Flex 2.0, part 1: Reading XML

 

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([EMAIL PROTECTED]);
    ---

    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([EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]> ]);

    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([EMAIL PROTECTED]);
    ---

    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([EMAIL PROTECTED]);
    ---

    789-789-7890

 

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

 

    for each (var ssn:XML in [EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]> )

    {

        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


 


 

 

 

  _____  

Yahoo! Groups Links

* To visit your group on the web, go to:
http://groups.yahoo.com/group/flexcoders/
  
* To unsubscribe from this group, send an email to:
[EMAIL PROTECTED]
<mailto:[EMAIL PROTECTED]> 
  
* Your use of Yahoo! Groups is subject to the Yahoo! Terms of
Service <http://docs.yahoo.com/info/terms/> . 




 
Yahoo! Groups Links

<*> To visit your group on the web, go to:
    http://groups.yahoo.com/group/flexcoders/

<*> To unsubscribe from this group, send an email to:
    [EMAIL PROTECTED]

<*> Your use of Yahoo! Groups is subject to:
    http://docs.yahoo.com/info/terms/
 


Reply via email to