- 浏览: 100594 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
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 1337flex 自定义多个命名空 ... -
FLEX中使用AS动态创建DataGrid
2013-01-09 16:24 920FLEX中使用AS动态创建DataGrid 2010年2月6日 ... -
flex与flash之间相互调用
2012-12-12 12:39 630http://www.cnblogs.com/kaixuan/ ... -
Flex与Flex创建的swf通信
2012-12-12 10:16 734加载子SWF的Flex程序代码 <?xml vers ... -
[AS3]加载视频(FLV)文件
2012-12-06 15:11 865[AS3]加载视频(FLV)文件 分类: FLEX/CS3-- ... -
通过FileReference打开本地图片崩溃的解决方法
2012-12-06 14:02 720通过FileReference打开本地图片崩溃的解决方法 最近 ... -
使用FileReference的load()方法加载本地图片
2012-12-06 13:56 9381、要想使用FileReference的load()方法和da ... -
[AS3]Bitmap序列化(将BitmapData保存为原生Binary/ByteArray)
2012-12-06 13:48 762[AS3]Bitmap序列化(将BitmapData保存为原生 ... -
as3 画五角星算法
2012-12-05 16:49 2633as3 画五角星算法 阅读:10次 时间:2012-03- ... -
flex嵌入完整html
2012-11-29 11:18 816有时候我们需要在Flex应用中嵌入HTML代码,根据嵌入HTM ... -
flex4 textArea的htmlText属性
2012-11-29 11:13 3119它现在包含Text布局框架(Text Layout Frame ... -
Tooltip应用
2012-11-29 11:11 733创建ToolTip: var errorToolTip:To ... -
数据绑定显示问题
2012-10-27 12:11 683数据绑定实时变化。 XMLListCollection 可以变 ... -
待解决问题
2012-09-18 23:48 7251.仪表盘 2.渐变填充的使用 3.发光效果的完美运用 能在一 ... -
as3加载外部图片的两种方式
2012-09-09 11:46 1049package net.burchin.loading { ... -
公式as3
2012-09-06 18:13 0as3 1人收藏此文章, 我要收藏 发表于1年前(2011-0 ... -
Flex中多线程的实现
2012-09-06 10:49 3524破阵子_如是我闻 如是我闻。一时佛在舍卫国,祗树给孤独园.. ... -
自定义column renderer
2012-08-09 15:07 966<?xml version="1.0" ... -
drowshadowFilter
2012-08-09 15:05 680DropShadowFilter 类,在Flash中为各种对象 ... -
123123
2012-08-08 17:16 0http://www.oschina.net/code/sni ...
相关推荐
XML解析的方法有很多,如访问节点、查询节点、遍历XML树等。例如,如果XML数据结构如下: ```xml <item id="1">Item 1 <item id="2">Item 2 ``` 我们可以这样访问和提取数据: ```actionscript for each (var...
<?xml version="1.0" encoding="utf-8"?> creationComplete="service.send()" > <![CDATA[ import mx.controls.Alert; import mx.rpc.events.FaultEvent; import mx.collections.ArrayCollection; ...
在`handleResult`函数中,我们把返回的XML字符串转换为XML对象,使用XPath表达式或属性访问语法筛选出需要的节点,然后遍历XMLList获取每个节点的属性或子节点值。 在实际应用中,你可能还需要处理可能出现的错误,...
总结,Flex解析XML文件主要通过XML和XMLList类,它们提供了丰富的API来操作XML数据。理解这些概念和方法,将有助于你在Flex应用中有效地处理和展示XML数据。无论是简单的数据展示还是复杂的交互逻辑,Flex都能通过...
3. **遍历XML节点**:可以通过循环遍历XML节点,提取所需信息。例如,遍历`items`并打印每个`item`的值: ```actionscript for each (var item:XML in items) { trace(item.toString()); } ``` 4. **XML与对象...
解析XML数据通常涉及到访问XML节点、获取属性值和遍历XML树。例如,我们可以通过节点名和属性名来访问特定的数据: ```actionscript var itemName:String = xml.root.item[0]; var itemAttrValue:String = xml.root...
- 遍历XML节点: ```actionscript for each (var item:XML in yourXMLList) { trace(item.name()); } ``` 6. **XML写入**: - 写入XML到本地文件时,可以使用`FileStream`的`writeUTFBytes()`方法。确保文件...
3. 遍历XML节点:接着,我们遍历`xml.children()`,这将返回XML文档中的所有顶级元素(在这个例子中是`dataSource`元素)。对于每个元素,我们创建一个新的`dataSource`节点,并将相应的属性赋值给它,如`@type`、`...
3. **动态数据处理**:Flex允许根据JSON数据动态创建UI组件,如通过遍历JSON对象并创建相应的`<mx:Label>`或`<mx:TextInput>`。 【结合Java服务器】 1. **服务器端通信**:Flex应用程序可以使用HTTPService或...
在Flex中,可以使用XML的elementsByTagName()方法或children()属性来获取节点的所有子节点,然后通过递归函数遍历这些子节点,实现无限级别的查找。如果找到匹配的节点,可以返回该节点及其所有子节点,这就是“若...
### Flex与XML操作详解 #### 一、E4X与ActionScript 3.0的集成 E4X(ECMAScript for XML)是ECMAScript标准的一个扩展,它被引入到ActionScript 3.0中,极大地简化了XML数据处理的过程。在Flash 5时,ActionScript...
在Flex开发中,`URLLoader` 是一个非常重要的类,用于加载远程数据,如XML、JSON等。在本示例中,它被用来从服务器获取XML文件并将其内容解析为XML对象,以便在应用程序中使用。`Flex` 是Adobe开发的一个开放源代码...
2. **遍历XML文档**:可以通过多种方式遍历XML文档,如深度优先遍历(Depth-First Traversal)或宽度优先遍历(Breadth-First Traversal)。在Flex中,通常使用AS3(ActionScript 3)提供的XML类来进行遍历操作。 #...
- 遍历DataTable中的每一行数据,创建对应的XML节点。 - 使用`CreateElement`、`CreateAttribute`等方法构造节点及其属性。 - 通过`AppendChild`方法添加子节点至父节点。 4. **保存XML文件**: - 最终将构建好...
在Flex开发中,XML是一种常见的数据格式,用于存储和传输数据。XML(eXtensible Markup Language)具有自描述性,结构清晰,易于解析,因此在Flex应用中常用于实现数据的增删改查功能。以下我们将深入探讨如何在Flex...
这个方法会遍历XML的指定标签并创建一个`BaseXmlModel`的集合。 - 对于`Node`,创建`BaseNodeContainer`实例,初始化并添加到容器中,同时在`nodeMap`中存储以ID为键的映射关系。 - 对于`Line`,根据起始和结束ID...
// 遍历XML节点,添加缩进 // ... return result; } } ``` 5. **动态XML生成**:在Flex应用中,常常需要根据运行时的数据动态生成XML。例如,从服务器获取数据后,可以将其转换为XML,然后展示在Flex界面中: ``...
接着,我们遍历ArrayCollection中的每个元素,将其包装为`<fruit>`节点,并添加到XML文档中。最后,我们将整个XML文档转换为字符串并输出。 这个实例对于理解数据转换非常有用,特别是在处理与服务器之间的数据交换...
在构建一个基于Flex的在线考试系统时,XML文件通常被用作存储试题和答案的数据格式。这是因为XML(Extensible Markup Language)具有结构清晰、易于解析和跨平台的优点,非常适合存储和传输复杂的数据结构,比如考试...