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! /****************************************** From:
flexcoders@yahoogroups.com [mailto:[EMAIL PROTECTED] On Behalf Of Gordon Smith 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 = 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]]); 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> <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"; --- 98765 var whichAttribute:String =
"ssn"; 789-789-7890 A new for-each loop lets you loop over multiple nodes
or attributes: for each (var ssn:XML in [EMAIL PROTECTED]) { trace(ssn); } --- 123-123-1234 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"; 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
|
Title: Message
- [flexcoders] E4X in Flex 2.0, part 1: Reading XML Gordon Smith
- Re: [flexcoders] E4X in Flex 2.0, part 1: Readi... JesterXL
- Re: [flexcoders] E4X in Flex 2.0, part 1: Readi... Jeff Beeman
- Re: [flexcoders] E4X in Flex 2.0, part 1: R... Jeff Steiner
- [flexcoders] Re: E4X in Flex 2.0, part ... Dave
- Re: [flexcoders] Re: E4X in Flex 2.... Jonathan Bezuidenhout
- RE: [flexcoders] E4X in Flex 2.0, part 1: Readi... Gordon Smith
- RE: [flexcoders] E4X in Flex 2.0, part 1: R... James Ward
- RE: [flexcoders] E4X in Flex 2.0, part 1: R... Hans Omli
- Re: [flexcoders] E4X in Flex 2.0, part ... Scott Barnes
- RE: [flexcoders] E4X in Flex 2.0, part 1: Readi... Gordon Smith
- RE: [flexcoders] E4X in Flex 2.0, part 1: Readi... Tolulope Olonade
- Re: [flexcoders] E4X in Flex 2.0, part 1: R... Scott Barnes