- 浏览: 97793 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
chensong215:
无法获取到ProgressEvent中的bytesTotal
自定义DownloadProgressBar -
qq2464785999:
非常感谢。
测试后,发现要用相对路径的话,好像要这么写
va ...
Flex写XML文件
xml.*.elements("node").(attribute("state")=="unchecked")
使用Flex的朋友都知道,Flex使用XML做为Flex 的数据源,那是家常便饭的事情,因此不可避免地要碰到XML遍历的问题,对于新手来说,这个问题,还真是需要解决的问题。下面我们来讨论一下这个问题。
一、XML的格式。我们这里讨论的XML数据,包括两种格式。
格式一: 树型结构XML数据:
[html] view plaincopyprint?
01.<root label="系统功能区">
02. <child1 label="设备管理" >
03. <child2 label="单点操作"/>
04. <child2 label="自定义分组"/>
05. <child2 label="设备维护"/>
06. <child2 label="节点配置"/>
07. <child2 label="通讯号码"/>
08. <child2 label="自定义字段"/>
09. </child1>
10. <child1 label="警报处理" >
11. <child2 label="报警参数"/>
12. <child2 label="报警维护"/>
13.</child1>
<root label="系统功能区">
<child1 label="设备管理" >
<child2 label="单点操作"/>
<child2 label="自定义分组"/>
<child2 label="设备维护"/>
<child2 label="节点配置"/>
<child2 label="通讯号码"/>
<child2 label="自定义字段"/>
</child1>
<child1 label="警报处理" >
<child2 label="报警参数"/>
<child2 label="报警维护"/>
</child1>
格式二:记录型XML数据:
[html] view plaincopyprint?
01.<alerts>
02. <alert>
03. <ID>213001</ID>
04. <name></name>
05. <kind></kind>
06. <desc></desc>
07. <addr></addr>
08. <tel>020-63263365</tel>
09. </alert>
10. <alert>
11. <ID>213001</ID>
12. <name></name>
13. <kind></kind>
14. <desc></desc>
15. <jb>5</jb>
16. <addr></addr>
17. <tel>020-63263365</tel>
18. </alert>
19.</alerts>
<alerts>
<alert>
<ID>213001</ID>
<name></name>
<kind></kind>
<desc></desc>
<addr></addr>
<tel>020-63263365</tel>
</alert>
<alert>
<ID>213001</ID>
<name></name>
<kind></kind>
<desc></desc>
<jb>5</jb>
<addr></addr>
<tel>020-63263365</tel>
</alert>
</alerts>
朋友们,有没有看出这两种数据的格式有个么不同,对了,一种的树型结构的,适合于给Tree控件提供数据源,一个是记录型的,适合于给 dataGrid List等控件提供数据源。
二、两种不同数据源的遍历方法不同。因为结构不一样,所以遍历起来的方法也不一样。
对于数型结构,要遍历的话,需要递归,遍历每一个叶子结点。
[java] view plaincopyprint?
01.private function Trav_AddDg(xml:XMLList,):void
02.{
03. for each (var xmlChildren:XML in xml)
04. {
05. if (xmlChildren.@flag == "")
06. {
07. //做事情
08. }
09. //有子结点,递归
10. if (xmlChildren.hasComplexContent())
11. {
12. var list:XMLList=xmlChildren.children();
13. Trav_AddDg(list, desc); //递归调用
14. }
15. }
16.}
private function Trav_AddDg(xml:XMLList,):void
{
for each (var xmlChildren:XML in xml)
{
if (xmlChildren.@flag == "")
{
//做事情
}
//有子结点,递归
if (xmlChildren.hasComplexContent())
{
var list:XMLList=xmlChildren.children();
Trav_AddDg(list, desc); //递归调用
}
}
}
注意递归的条件,防止无穷递归。
对于记录型结构我们采用循环的方式就可以遍历:
[java] view plaincopyprint?
01.var i:int;
02.for(i=0;i<flexXML.child("alert").length();i++)
03.
04.{
05.
06.trace(flexXML.child("alert").[i].Name+":"+flexXML.child("alert").[i].Version);
07.}
楼主试试这个
<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical">
<mx:XML id="xmlSource">
<node label="grandFather" state="unchecked">
<node label="Father" state="unchecked">
<node label="son" state="unchecked">
<node label="1001" state="unchecked">
<node label="100101" state="unchecked">
</node>
</node>
</node>
</node>
<node label="Uncle3" state="unchecked">
<node label="son2" state="unchecked">
<node label="1002" state="unchecked">
<node label="100102" state="unchecked">
</node>
</node>
</node>
</node>
<node label="Uncle3" state="unchecked">
<node label="son3" state="unchecked">
<node label="1003" state="unchecked">
<node label="100103" state="checked">
</node>
</node>
</node>
</node>
</node>
</mx:XML>
<mx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
import mx.controls.Alert;
private function onClick():void{
var xmlList:XMLList = xmlSource.children();
findChecked(xmlList);
}
private function findChecked(xmlList:XMLList):void{
for(var i:int =0;i<xmlList.length();i++){
if(xmlList[i].@state.toString()== "checked"){
Alert.show(xmlList[i].@label.toString());
br}
if(xmlList[i].hasComplexContent()){
findChecked(xmlList[i].children());
}
}
}
使用Flex的朋友都知道,Flex使用XML做为Flex 的数据源,那是家常便饭的事情,因此不可避免地要碰到XML遍历的问题,对于新手来说,这个问题,还真是需要解决的问题。下面我们来讨论一下这个问题。
一、XML的格式。我们这里讨论的XML数据,包括两种格式。
格式一: 树型结构XML数据:
[html] view plaincopyprint?
01.<root label="系统功能区">
02. <child1 label="设备管理" >
03. <child2 label="单点操作"/>
04. <child2 label="自定义分组"/>
05. <child2 label="设备维护"/>
06. <child2 label="节点配置"/>
07. <child2 label="通讯号码"/>
08. <child2 label="自定义字段"/>
09. </child1>
10. <child1 label="警报处理" >
11. <child2 label="报警参数"/>
12. <child2 label="报警维护"/>
13.</child1>
<root label="系统功能区">
<child1 label="设备管理" >
<child2 label="单点操作"/>
<child2 label="自定义分组"/>
<child2 label="设备维护"/>
<child2 label="节点配置"/>
<child2 label="通讯号码"/>
<child2 label="自定义字段"/>
</child1>
<child1 label="警报处理" >
<child2 label="报警参数"/>
<child2 label="报警维护"/>
</child1>
格式二:记录型XML数据:
[html] view plaincopyprint?
01.<alerts>
02. <alert>
03. <ID>213001</ID>
04. <name></name>
05. <kind></kind>
06. <desc></desc>
07. <addr></addr>
08. <tel>020-63263365</tel>
09. </alert>
10. <alert>
11. <ID>213001</ID>
12. <name></name>
13. <kind></kind>
14. <desc></desc>
15. <jb>5</jb>
16. <addr></addr>
17. <tel>020-63263365</tel>
18. </alert>
19.</alerts>
<alerts>
<alert>
<ID>213001</ID>
<name></name>
<kind></kind>
<desc></desc>
<addr></addr>
<tel>020-63263365</tel>
</alert>
<alert>
<ID>213001</ID>
<name></name>
<kind></kind>
<desc></desc>
<jb>5</jb>
<addr></addr>
<tel>020-63263365</tel>
</alert>
</alerts>
朋友们,有没有看出这两种数据的格式有个么不同,对了,一种的树型结构的,适合于给Tree控件提供数据源,一个是记录型的,适合于给 dataGrid List等控件提供数据源。
二、两种不同数据源的遍历方法不同。因为结构不一样,所以遍历起来的方法也不一样。
对于数型结构,要遍历的话,需要递归,遍历每一个叶子结点。
[java] view plaincopyprint?
01.private function Trav_AddDg(xml:XMLList,):void
02.{
03. for each (var xmlChildren:XML in xml)
04. {
05. if (xmlChildren.@flag == "")
06. {
07. //做事情
08. }
09. //有子结点,递归
10. if (xmlChildren.hasComplexContent())
11. {
12. var list:XMLList=xmlChildren.children();
13. Trav_AddDg(list, desc); //递归调用
14. }
15. }
16.}
private function Trav_AddDg(xml:XMLList,):void
{
for each (var xmlChildren:XML in xml)
{
if (xmlChildren.@flag == "")
{
//做事情
}
//有子结点,递归
if (xmlChildren.hasComplexContent())
{
var list:XMLList=xmlChildren.children();
Trav_AddDg(list, desc); //递归调用
}
}
}
注意递归的条件,防止无穷递归。
对于记录型结构我们采用循环的方式就可以遍历:
[java] view plaincopyprint?
01.var i:int;
02.for(i=0;i<flexXML.child("alert").length();i++)
03.
04.{
05.
06.trace(flexXML.child("alert").[i].Name+":"+flexXML.child("alert").[i].Version);
07.}
楼主试试这个
<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical">
<mx:XML id="xmlSource">
<node label="grandFather" state="unchecked">
<node label="Father" state="unchecked">
<node label="son" state="unchecked">
<node label="1001" state="unchecked">
<node label="100101" state="unchecked">
</node>
</node>
</node>
</node>
<node label="Uncle3" state="unchecked">
<node label="son2" state="unchecked">
<node label="1002" state="unchecked">
<node label="100102" state="unchecked">
</node>
</node>
</node>
</node>
<node label="Uncle3" state="unchecked">
<node label="son3" state="unchecked">
<node label="1003" state="unchecked">
<node label="100103" state="checked">
</node>
</node>
</node>
</node>
</node>
</mx:XML>
<mx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
import mx.controls.Alert;
private function onClick():void{
var xmlList:XMLList = xmlSource.children();
findChecked(xmlList);
}
private function findChecked(xmlList:XMLList):void{
for(var i:int =0;i<xmlList.length();i++){
if(xmlList[i].@state.toString()== "checked"){
Alert.show(xmlList[i].@label.toString());
br}
if(xmlList[i].hasComplexContent()){
findChecked(xmlList[i].children());
}
}
}
发表评论
-
flex 自定义多个命名空间以及标签名
2013-01-22 15:21 1266flex 自定义多个命名空 ... -
FLEX中使用AS动态创建DataGrid
2013-01-09 16:24 883FLEX中使用AS动态创建DataGrid 2010年2月6日 ... -
flex与flash之间相互调用
2012-12-12 12:39 610http://www.cnblogs.com/kaixuan/ ... -
Flex与Flex创建的swf通信
2012-12-12 10:16 703加载子SWF的Flex程序代码 <?xml vers ... -
[AS3]加载视频(FLV)文件
2012-12-06 15:11 847[AS3]加载视频(FLV)文件 分类: FLEX/CS3-- ... -
通过FileReference打开本地图片崩溃的解决方法
2012-12-06 14:02 705通过FileReference打开本地图片崩溃的解决方法 最近 ... -
使用FileReference的load()方法加载本地图片
2012-12-06 13:56 8961、要想使用FileReference的load()方法和da ... -
[AS3]Bitmap序列化(将BitmapData保存为原生Binary/ByteArray)
2012-12-06 13:48 748[AS3]Bitmap序列化(将BitmapData保存为原生 ... -
as3 画五角星算法
2012-12-05 16:49 2594as3 画五角星算法 阅读:10次 时间:2012-03- ... -
flex嵌入完整html
2012-11-29 11:18 797有时候我们需要在Flex应用中嵌入HTML代码,根据嵌入HTM ... -
flex4 textArea的htmlText属性
2012-11-29 11:13 3097它现在包含Text布局框架(Text Layout Frame ... -
Tooltip应用
2012-11-29 11:11 699创建ToolTip: var errorToolTip:To ... -
数据绑定显示问题
2012-10-27 12:11 629数据绑定实时变化。 XMLListCollection 可以变 ... -
待解决问题
2012-09-18 23:48 6891.仪表盘 2.渐变填充的使用 3.发光效果的完美运用 能在一 ... -
as3加载外部图片的两种方式
2012-09-09 11:46 985package net.burchin.loading { ... -
公式as3
2012-09-06 18:13 0as3 1人收藏此文章, 我要收藏 发表于1年前(2011-0 ... -
Flex中多线程的实现
2012-09-06 10:49 3466破阵子_如是我闻 如是我闻。一时佛在舍卫国,祗树给孤独园.. ... -
自定义column renderer
2012-08-09 15:07 896<?xml version="1.0" ... -
drowshadowFilter
2012-08-09 15:05 648DropShadowFilter 类,在Flash中为各种对象 ... -
123123
2012-08-08 17:16 0http://www.oschina.net/code/sni ...
相关推荐
<?xml version="1.0" encoding="utf-8"?> creationComplete="service.send()" > <![CDATA[ import mx.controls.Alert; import mx.rpc.events.FaultEvent; import mx.collections.ArrayCollection; ...
flex读取xml文件的数据的三种方式及其比较
flex解析xml
使用httpService通过xml传递对象的时候,用于flex端解析xml的实例。
主要介绍了flex 遍历Object对象内容的实现代码,需要的朋友可以参考下
flex 的xml操作xml操作xml操作xml操作xml操作xml操作xml操作xml操作
flex 操作xml 实现增删改查flex 操作xml 实现增删改查flex 操作xml 实现增删改查flex 操作xml 实现增删改查flex 操作xml 实现增删改查
本节主要介绍了Flex遍历Object键和值具体实现,需要的朋友可以参考下
flex 读XML 写XML 并保存为xml文件,由图生成Xml文件,由XMl文件生成图
这是使用flex解析xml文件,并将xml文件的内容作为ComboBox下拉列表的数据提供源
Flex读取xml文件 几种方法Flex读取xml文件 几种方法Flex读取xml文件 几种方法
flex解析xml实例,可读取xml标签来获取信息,并附表情
Flex读取XML不刷新问题
flex 解析xml文件,利用httpservice读取xml文件,按要求过滤字符串,获取对应的值
Flex加载xml数据三种方式:HTTPService XMLLoader XML类
flex读取xml乱码的解决方法
FLEX操作XML&JSON,是一篇翻译过来的文章.原文是INFOQ上的一篇文章.原文地址为: http://www.infoq.com/articles/flex-xml-json
Flex之URLLoader加载XML 使用URLLoader加载XML
Ajax struts2 xml flex Ajax struts2 xml flex Ajax struts2 xml flex Ajax struts2 xml flex Ajax struts2 xml flex Ajax struts2 xml flex