第一次翻译,很多内容看的懂却表达不好。。英文水平有待提高。
介绍XML
AS3 包含了一组基于ECMAScript for XML (E4X) 标准(specification)的类。这些类功能强大,而且能够很容易用在处理XML数据上。利用 E4X,你可以比以往的语言更快的开发处理XML数据的程序。还有一个额外的好处,就是你编的代码很容易阅读。
许多服务端程序用XML来构造数据,所以你可以用AS3里的XML类来创建美观的RIA程序来连接web service。一个web service 是一种通过通用协议(比如Simple Object Access Protocol (SOAP) )连接客户端与服务端的手段,比如连接一个在客户端的Flash Player 9程序和一个在web服务器上的程序。( 译者注:相当于统一了程序接口,而XML是数据传递的主要媒介 )。
Flex提供了一个用于处理XML数据的类和方法的集合。 这些类和方法被统称为E4X。在Flex中使用的两个主要的类集合是XML和XMLList 。
注意 : 在AS2.0中也有一个XML类。在AS3.0中,他被重命名为XMLDocument。这样他就不会和E4X中的XML类产生冲突。在AS3.0中,这些遗留类——XMLDocument,XMLNode,XMLParser,和 XMLTag —— 被包含在 flash.xml 包中,主要是用来对AS2.0支持。E4X类是核心类;所以你不需要导入包就可以使用他们。这个快速入门不对AS2 XML 的遗留类做更深的讨论。更多的细节要看Flex 3 语言参考中的 flash.xml包。
下面的例子用ActionScript创建一个叫做 myBooks 的 XML literal控件。你可以在AS代码块中用XML创建一个XML literals控件, 然后把它赋值给一个XML类型的变量,因为在Flex中XML 是一个本地数据类型,就像 Number 或者 Boolean一样。
以下例子中的myBooks XML literal 包含了两个书条目。第一个书条目有四个子元素,分别叫做 title,author , amazonUrl, 和 pageCount。
为了访问XML实例中的元素,可以用(.)运算符,就像访问一个对象的属性一样。例如,要得到一个书条目列表的引用,可以写myBooks.book.。这句话的返回值是一个XMLList实例,它包含了myBooks中两个书条目。访问XMLList中特定的条目,可以用数组符号。例如,用myBooks.book[0],就得到了第一本书的引用。如果曾经接触过AS的对象和数组,你应该对这些点运算符和数组符号很熟悉。然而,E4X却不止是这样,他能让你在XML中查找到包含特定属性(attribute )的条目。
在下面的例子中,通过查找条目的ISBN内容得到第一本书的引用。 E4X中的属性 表示法是在他们前面加 “@”符号。语句 myBooks.book.( @ISBN == “1590595181”) 意思就是 “找到那本ISBN attribute是1590595181的书。”其他的例子描述了更高级的功能,查找技术。
代码:
02 <?xml version="1.0" encoding="utf-8"?>
03 <mx:Application
04 xmlns:mx= "http://www.adobe.com/2006/mxml"
05 width= "440" height= "400"
06 initialize= "initializeHandler();"
07 >
08
09 <mx:Script>
10 <![CDATA[
11
12 [Bindable] public var a:XMLList;
13 [Bindable] public var b:XMLList;
14 [Bindable] public var c:XMLList;
15 [Bindable] public var d:XMLList;
16
17 // Model: XML 数据范例
18 // 我收集的一些书
19 [Bindable]
20 private var myBooks:XML =
21 <books>
22
23 <book ISBN="1590595181">
24 <title>Foundation ActionScript Animation: Making Things Move</title>
25 <author>Keith Peters</author>
26
27 <amazonUrl>http://tinyurl.com/npuxt</amazonUrl>
28 <pageCount>470</pageCount>
29 </book>
30
31 <book ISBN="1582346194">
32 <title>Send in the Idiots: Stories from the Other Side of Autism</title>
33
34 <author>Kamran Nazeer</author>
35 <amazonUrl>http://tinyurl.com/lo5ts</amazonUrl>
36 <pageCount>500</pageCount>
37
38 </book>
39 </books>
40
41 private function initializeHandler():void
42
43 {
44 // 这个XML列表包含了两本书
45 a = myBooks.book;
46
47 // Keith Peters
48 b = myBooks.book[0].author;
49
50 // 470
51
52 c = myBooks.book.(@ISBN=="1590595181").pageCount;
53
54 // 删除第一本书
55 delete myBooks.book[0];
56
57 // 把title赋值给d
58 d = myBooks.book[0].title;
59 }
60 ]]>
61 </mx:Script>
62
63
64 <!-- 用户接口 -->
65 <mx:Panel
66 title= "XML lookup results"
67 paddingBottom= "10" paddingLeft= "10" paddingRight= "10" paddingTop= "10" >
68
69 <mx:Text text= "{'a: ' + a}" width= "300" />
70 <mx:Label text= "{'b: ' + b}" />
71 <mx:Label text= "{'c: ' + c}" />
72
73 <mx:Label text= "{'d: ' + d}" />
74 </mx:Panel>
75
76 </mx:Application>
@和( . ) 运算符不仅用来读取XML中的数据,还可以用在给数据赋值。
下面的例子创建了一个主/从视图。主视图包含了一个DataGrid 控件来表示数目列表。在从视图中,可以在从视图输入数据来书的信息。
主/从视图使用数据绑定来从XML中读取和修改数据。
可以用以下几种方式来使用E4X:
myBooks.book 表示XMLList中的书目。
myBooks.book[selectedBookIndex]表示当前所选择的书目。
myBooks.book[selectedBookIndex].title 表示当前选择书目的title
根据当前所选择书目的title,来修改文本框的内容。
需要把myBooks.book[selectedBookIndex].title.绑定到文本框的文本属性。同样的,根据用户最后输入的数据来修改XML内容,当文本框中的文本改变时,要把最后输入的文本赋值给myBooks.book[selectedBookIndex].title
其他在detail view的组件也像titleInput control一样处理数据。