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 Adobe buyout or Flex 2 release dates. This is good info, but not *that* exciting!
Still laughing... :) -James On Tue, 2005-05-17 at 17:15 -0700, Gordon Smith wrote: > 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 plans. Of course, we do want your feedback on > features for the next release, and we'll be sharing more plans with > you in the future, as we get closer to the next release. > > Sorry, > Gordon > -----Original Message----- > From: [email protected] > [mailto:[EMAIL PROTECTED] On Behalf Of Gordon Smith > Sent: Tuesday, May 17, 2005 4:54 PM > To: '[email protected]' > 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]); > > > 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]) > > > { > > > 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] > > * Your use of Yahoo! Groups is subject to the Yahoo! > Terms of Service. > 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/

