`

flex 数据基础-使用XML和XMLList

    博客分类:
  • Flex
 
阅读更多

flex 数据基础-使用XML和XMLList  

【转帖,备忘】

flex的一个特性是数据驱动。这么说不太清楚,举个例子吧,在网页里做一个数据表格,要先画好表格结构然后把数据填进去,而在flex 里则是为 datagrid指定一个数据源,数据源的结构决定了datagrid的呈现样式。很多时候数据源是XMLXMLList充当的,所以了解XMLXMLList还是有很有必要的。

 

一般情况下,由数据端语言生成XMLXMLList提供给Flex,由Flex直接使用或转换成ArrayCollection展现数据

 

那么XMLXMLList有什么区别呢,很简单,看是否含有根节点。举例来说:

 

<root>

<node type="student" name="学生一">

<node type="student" name="学生二">

<node type="teacher" name="老师一">

</root>

这就是一个典型的XML,其中<root>是根节点,<node>是子节点。type,name是属性名,等号右边是属性值。而

<node type="student" name="学生一" />

<node type="student" name="学生二" />

<node type="teacher" name="老师一" />

这一部分就是一个XMLList

好了,知道了什么是XMLXMLList,下面看怎么使用他们。

1、使用AS创建XML

前面的代码不罗嗦,直接看script里的

<mx:Script>

    <![CDATA[

        Private var myData:XML;

        private function initApp():void

        {

            myData = <root>

                            <node type="student" name="小花" />

                            <node type="student" name="小龙" />

                            <node type="student" name="小刚" />

                            </root>

        }

    ]]>

</MX:Script>

注意一下,这是比较基础的flex特性,全局变量可以在函数体外定义,但实例话对象并赋值这个过程必须在函数体内进行,不然会报错说变量未定义。用上面的代码举例:

Private var myData:XML = new XML();

myData = <root>

                ……

               </root>

这样写代码,OK,保存的时候就会提示变量未定义。创建一个function,在函数体内为myData赋值才是正确的。

其实也可以在声明变量的时候直接赋值,也不会报错,如下:

Private var myData:XML = <root>

                                          ……

                                         </root>

在函数内调用myData也不会任何问题。

ok, 言归正传,我们在initApp()这个函数里为myData赋值,也就是说必须运行initApp()这个函数才能使用,为了能自动为myData赋 值,还需要在windowedApplication标签加入creationComplete="initApp()",作用是在程序初始化结束后会执 行initApp()这个函数。

另外,这种方式只能定义XML,既必须有根节点,不能定义XMLList

除了直接给XML变量赋值外,还可以使用构造函数,如下:

<mx:Script>

<![CDATA[

private var myData:XML;

private function initApp():Void

{

var myStr:String = "<root>

                              ……

                              </root>"

myData = new XML(myStr);

}

]]>

</mx:Script>

这种形式要注意下XML中的引号要换成单引号。

2、用标签创建XML/XMLList

废话不说,直接看标签代码

<mx:XML id="myData">

<root>

<node type=……

</root>

</mx:XML>

注意啊, 在flex4里,直接插入这个标签是会报错的,正确的做法应该是在<mx:XML>外增加一个父标签<fx:Declarations>

同样的定义XMLList,只是没有<root>标签而已,不啰嗦。

3、输出XML某一类节点

非常简单,,可以直接使用点语法,看例子:

假设有这样一个XML,要取节点名为girl的子节点组成的XMLList,如下:

private var myData:XML = <student>

                                              <boy name="小刚"/>

                                              <boy name="小刚"/>

                                              <girl name="小花"/>

                                              <girl name="小兰"/>

                                            </student>

private var girls:XMLList ;

private function initApp():Void

{

    girls = myData.girl;

    trace(girls);

}

注意这个地方,如果名为girl的节点只有一个,系统会报错,后面会解释。

XML对象跟节点相关的功能总结下,简单,不多解释,记住就好:

1) 获取全部节点 myData.elements("*")

2) 按节点名称获取节点 myData.elements("node")

3) 获取节点下的所有所有节点 myData.node[0].elements() 第一个node节点下的所有内容,比如说:

<root>

<node>

<child name="john"/>

<childe name="Tom"/>

</node>

</root>

显示的就是

<child name="john"/>

<childe name="Tom"/>

4) 单条数据的情况,注意,下面一段呼应上面的红色内容:

myData2 = <root>

                  <boy name="数据2"/>

                  </root>

trace(myData2.elements()) 怎么显示呢?嘿嘿,没错,就是啥都没有,为啥?这里说一下Flex的一个默认的情况,如果XML元素只有一个节点,那么Flex默认输出其节点内容而不是把节点整个显示出来,而结点内容为空,自然就啥都显示不出来了。下面的情况会有所不同:

myData3 = <root>

                  <boy name="数据2">这个节点有内容了</boy>

                  </root>

trace(myData3.elements()); 什么情况呢?没错,就是会显示 “这个节点有内容了这行字。

是不是单行节点无法显示整个XMLList内容呢?当然不是,只要这样就可以了:

trace(myData2.elements().toXMLString());

5  获取下级节点的个数  myData.elements().length()

这里这么写也没什么问题,不过事实上没这么简单。举个例子吧:

<root>

<people type="student">

<boy name="小刚"/>

<girl name="小花"/>

</people>

<people type="teacher" name="老师"/>

<class name="5"/>

</root>

好,如果要查看root下所有二级子节点的个数,myData.elements().length()没有问题,显示的值为3

如果要获取root下所有后代的个数,就应该这样写  myData.descendants("*").length(),显示值为5

注意啊,这个descendants("*")返回的也是XMLList,不过返回的值很有意思,没事儿可以测试下,这里只说length相关,就不啰嗦了。

6) 获取节点名字  myData.elements()[0].name() 不解释

       获取节点内容  myData.elements()[0]  也可以用myData.elements()[0].text();

7) 获取父节点  节点名.parent()  myData.element[0].childe[0].parent().@name  其实就是element[0]name属性

8)取得属性值和属性名  myData.node[0].@name myData第一个节点的属性name的值等价于myData.node[0].attribute("name"),读取全部的值myData.node[0].atttibute("*")

9) XML按条件过滤  myData.elements()[0].(@name=="Tom"),注意如果myData下的子孙节点有的没有@name这个属性,将取不到任何信息。

10)添加节点组合生成XML

myData.appendChild(<node ……/>),这是在最后添加一个节点

myData.prependChild(<node....../>),这是在最前面田间一个节点

myData.insertChildAfter(myData.node[0],<node ..../>),这是在第一个节点后面添加

myData.insertChildBefore(myData.node[0],<node ..../>),这是在第一个节点前面添加

myData.newElement=<node ....../>

myData.newElement=<node ......>内容</node>

myData.node[1] = "aaa"  有这个节点就修改节点的内容,没有的话就创建一个节点

节点名字可以由变量组成 var bl:int=2; myData["node"+bl] = "name";

写一个用数组构成XML的例子:

private function buildXML():Void

{

var ids:Array = [121,122,123];

var names:Array = [["a1","a2"],["b1","b2"],["c1","c2"]];

var arrData:XML = new XML("<root></root>");

for(var i:int=0; i<ids.length;i++)

{

var node:XML = new XML();

node = <employee id={ids[i]}>

<last>{names[i][0]}</last>

<first>{names[i][0]}</first>

</employee>

arrData.appendChild(node);

}

11) 添加、修改节点属性

myData.node[1].@name="aaa"    name属性则属性值改为aaa,没有就创建一个name属性

也可以动态添加属性,比如说用循环

for(var i:int=0; i<3; i++)

{

myData.node[1].@["name"+i] = "tom";

}

12) 删除节点和属性

删除节点  delete myData.node[1]; 注意,这里可以删除多个节点

删除属性 delete myData.node[1].@name  注意,这里同样可以删除多个

删除所有属性,需要使用循环

var attri:XMLList = myData.node.@*;

4、读取外部XML/XMLList

1)使用XML标签  <mx:XML source="data/xml.xml" id="myData">

2)使用URLLoader,在Action中加载

import flash.net.URLLoader;

import flash.net.URLRequest;

private function loadXML():Void

{

var request:URLRequest = new URLRequest("data/xml.xml");

var loader:URLLoader = new URLLoader();

loader.addEventListener(Event.COMPLETE,completeHander);

loader.load(request);

}

private function completeHander(e:Event):Void

{

var myData2:XML = new XML(e.target.data);

}

如果在变异过程中出现错误提示无法访问本地资源....”,需要设置编译参数:-use-netwrok = false

3)使用HTTPService,看代码:

import mx.rpc.events.ResultEvent;

private function initApp():Void

{

ser.send();

}

private function resultHandler(e:ResultEvent):woid

{

var myData3:XML = e.result asXML;

trace(myData3);

声明HTTPService标签

<mx:HTTPService id="ser" url="data/xml.xml" result="resultHandler(event)" resultFormat="e4x"/>

}

分享到:
评论

相关推荐

    Flex数据共享与压缩

    Flex 本地数据共享与压缩存储,因为flex本地共享空间存储数据有限,在面对大数据,如xml或大数组存储时,我们可能要考虑对数据进行压缩后再存;本类以xmllist 数据为例来进行压缩存储;

    Foundation XML and E4X for Flash and Flex

    She explores the new XML and XMLList classes and explains E4X expressions, providing examples for both Flash and Flex. In addition to explaining how to incorporate XML documents in SWF applications, ...

    Flex:ArrayCollection转xml形式的实例

    NULL 博文链接:https://xaajie.iteye.com/blog/379054

    flex 解析xml绑定到combobox点击按钮把combobox所选的数据添加到List

    简单的小例子,没事做着玩的,功能为flex 解析xml绑定到combobox点击按钮把combobox所选的数据添加到List列表。

    flex 解析xml文件 httpservice

    flex 解析xml文件,利用httpservice读取xml文件,按要求过滤字符串,获取对应的值

    Flex4权威指南+随书源代码+Flexbuild使用工具

    6. 使用远程XML数据 7. 创建类 8. 使用数据绑定和集合 9. 将应用程序拆分成组件 10. 使用DataGroup和List 11. 创建和分派事件 12. 使用DataGrid与项目呈现器 13. 使用拖放 14. 实现导航 15. 使用格式化器和验证器 16...

    FLEX 图片切换广告 xml做配置文件

    FLEX 图片切换广告 xml做配置文件 类似http://www.haoliv.com/list.php?catid=10243这个样的

    Flex Tree 源码

    Flex、Java 、Tree代码 使用XMLList生成xml文件

    flex3的cookbook书籍完整版dpf(包含目录)

    使用和显示项渲染器的NULL项 5.12节.为List创建右键菜单 5.13节.自定义List被选中项的外观 第六章. DataGrid和高级DataGrid(179) 6.1节. 创建DataGrid自定义列 6.2节. 为DataGrid列设定排序函数 6.3节. 启动...

    Flex4权威指南(清晰pdf中文版)

    FLEX 4权威指南(带实例代码) ...8.使用数据和绑定集合 9.将应用程序拆分成组件 10.使用DataGroup 和 List 11.创建和分派事件 。。。。。。。。。。。。 16.使用样式制动 17.使用皮肤指定FLEX应用 18.自定义组件

    带特效的flex list

    带有动画特效的曾、删、改和查。能加载xml数据并作为数据源。

    flex滤镜实例以及源码……

    &lt;?xml version="1.0" encoding="utf-8"?&gt; [1.0, 1.0]" backgroundGradientColors="[#FFFFFF, #FFFFFF]" horizontalScrollPolicy="off" verticalScrollPolicy="off" fontSize="12" applicationComplete="app(event)"&gt;...

    使用asx3m与xstream配合解决flex与java利用httpservice传递xml数据问题

    过年期间抽空在弄flex前端对象与后端java对象利用httpservice交互的问题。比如前端需要user list数据,构造了flex user object类。

    ActionScript开发人员指南中文版

    XMLList对象 初始化XML变量 组合和变换XML对象 遍历XML结构 使用XML命名空间 XML类型转换 读取外部XML文档 在ActionScript中使用XML的示例:从Internet加载RSS数据 第章:使用本机JSON功能 JSONAPI概述 定义自定义...

    Action Script

    ActionScript3.0教程(7):使用XML和XMLList类处理XML数据………40 ActionScript3.0教程(8):数据绑定…………………………………………44 ActionScript3.0教程(9):使用样式(style)和皮肤(Skin)画笔……………...

    k2t openwrt固件

    k2topenwrt固件。基于learn大的开源代码编译。 Welcome to Lean's git source of OpenWrt and ... Section 7 has more information about this, including the list of additional requirements that are permitted.

    asp.net知识库

    利用反射实现ASP.NET控件和数据实体之间的双向绑定,并且在客户端自动验证输入的内容是否合法 asp.net报表解决方法 SQLDMO类的使用 SQL过程自动C#封装,支持从表到基本存储过程生成 使用SQLDMO控制 SQL Server 使用SQL...

    Maven权威指南 很精典的学习教程,比ANT更好用

    2. 安装和运行Maven 2.1. 验证你的Java安装 2.2. 下载Maven 2.3. 安装Maven 2.3.1. 在Mac OSX上安装Maven 2.3.2. 在Microsoft Windows上安装Maven 2.3.3. 在Linux上安装Maven 2.3.4. 在FreeBSD或OpenBSD上...

    Developing Flex Applications 910p dda_doc88_cracker.zip

    1. a book Developing Flex Applications 2. a web page viewer for doc88 ebt 3. a DDA downloader for doc88.com CONTENTS PART I: Presenting Flex CHAPTER 1: Introducing Flex. . . . . . . . . . . . . . ...

    Flex FLV播放器

    基本实现了一个播放器应该有的功能,进度条,时间显示,... 这里有一个扩展内容为XML扩展,想深入下去的朋友,可以用我这个读取XML的方法,然后把值赋给LIST, 比如:&lt;mx:list/&gt; 通过itemRenderer来排列读取的内容。

Global site tag (gtag.js) - Google Analytics