FLEX quick start XML数据处理

来源:互联网 发布:嘉实优化红利怎么样 编辑:程序博客网 时间:2024/05/25 18:12

第一次翻译,很多内容看的懂却表达不好。。英文水平有待提高。

 

介绍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中使用的两个主要的类集合是XMLXMLList

 

注意 : AS2.0中也有一个XML类。在AS3.0中,他被重命名为XMLDocument。这样他就不会和E4X中的XML类产生冲突。在AS3.0中,这些遗留类——XMLDocumentXMLNodeXMLParser,和 XMLTag —— 被包含在 flash.xml 包中,主要是用来对AS2.0支持。E4X类是核心类;所以你不需要导入包就可以使用他们。这个快速入门不对AS2 XML 的遗留类做更深的讨论。更多的细节要看Flex 3 语言参考中的 flash.xml包。

下面的例子用ActionScript创建一个叫做 myBooks XML literal控件。你可以在AS代码块中用XML创建一个XML literals控件, 然后把它赋值给一个XML类型的变量,因为在FlexXML 是一个本地数据类型,就像 Number 或者 Boolean一样。

 

以下例子中的myBooks XML literal 包含了两个书条目。第一个书条目有四个子元素,分别叫做 titleauthor amazonUrl, pageCount

 

为了访问XML实例中的元素,可以用(.)运算符,就像访问一个对象的属性一样。例如,要得到一个书条目列表的引用,可以写myBooks.book.。这句话的返回值是一个XMLList实例,它包含了myBooks中两个书条目。访问XMLList中特定的条目,可以用数组符号。例如,用myBooks.book[0],就得到了第一本书的引用。如果曾经接触过AS的对象和数组,你应该对这些点运算符和数组符号很熟悉。然而,E4X却不止是这样,他能让你在XML中查找到包含特定属性(attribute )的条目。

在下面的例子中,通过查找条目的ISBN内容得到第一本书的引用。 E4X中的属性 表示法是在他们前面加 @”符号。语句 myBooks.book.( @ISBN == “1590595181”) 意思就是 “找到那本ISBN attribute1590595181的书。”其他的例子描述了更高级的功能,查找技术。

 

 

代码:

XML语言: Codee#1268
01 XML语言: Codee#1267
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一样处理数据。