`
it_liuyong
  • 浏览: 100596 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

flex遍历xml

    博客分类:
  • flex
 
阅读更多
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解析xml框架实例

    XML解析的方法有很多,如访问节点、查询节点、遍历XML树等。例如,如果XML数据结构如下: ```xml &lt;item id="1"&gt;Item 1 &lt;item id="2"&gt;Item 2 ``` 我们可以这样访问和提取数据: ```actionscript for each (var...

    Flex调用xml通过DataGrid遍历简单示例

    &lt;?xml version="1.0" encoding="utf-8"?&gt; creationComplete="service.send()" &gt; &lt;![CDATA[ import mx.controls.Alert; import mx.rpc.events.FaultEvent; import mx.collections.ArrayCollection; ...

    flex 解析xml文件 httpservice

    在`handleResult`函数中,我们把返回的XML字符串转换为XML对象,使用XPath表达式或属性访问语法筛选出需要的节点,然后遍历XMLList获取每个节点的属性或子节点值。 在实际应用中,你可能还需要处理可能出现的错误,...

    flex解析xml

    总结,Flex解析XML文件主要通过XML和XMLList类,它们提供了丰富的API来操作XML数据。理解这些概念和方法,将有助于你在Flex应用中有效地处理和展示XML数据。无论是简单的数据展示还是复杂的交互逻辑,Flex都能通过...

    flex 解析xml实例

    3. **遍历XML节点**:可以通过循环遍历XML节点,提取所需信息。例如,遍历`items`并打印每个`item`的值: ```actionscript for each (var item:XML in items) { trace(item.toString()); } ``` 4. **XML与对象...

    Flex里解析XML数据

    解析XML数据通常涉及到访问XML节点、获取属性值和遍历XML树。例如,我们可以通过节点名和属性名来访问特定的数据: ```actionscript var itemName:String = xml.root.item[0]; var itemAttrValue:String = xml.root...

    flex 操作XML

    - 遍历XML节点: ```actionscript for each (var item:XML in yourXMLList) { trace(item.name()); } ``` 6. **XML写入**: - 写入XML到本地文件时,可以使用`FileStream`的`writeUTFBytes()`方法。确保文件...

    flex解析xml文件

    3. 遍历XML节点:接着,我们遍历`xml.children()`,这将返回XML文档中的所有顶级元素(在这个例子中是`dataSource`元素)。对于每个元素,我们创建一个新的`dataSource`节点,并将相应的属性赋值给它,如`@type`、`...

    FLEX操作XML&JSON

    3. **动态数据处理**:Flex允许根据JSON数据动态创建UI组件,如通过遍历JSON对象并创建相应的`&lt;mx:Label&gt;`或`&lt;mx:TextInput&gt;`。 【结合Java服务器】 1. **服务器端通信**:Flex应用程序可以使用HTTPService或...

    flex-xml合并,树查找xml

    在Flex中,可以使用XML的elementsByTagName()方法或children()属性来获取节点的所有子节点,然后通过递归函数遍历这些子节点,实现无限级别的查找。如果找到匹配的节点,可以返回该节点及其所有子节点,这就是“若...

    flex - xml操作

    ### Flex与XML操作详解 #### 一、E4X与ActionScript 3.0的集成 E4X(ECMAScript for XML)是ECMAScript标准的一个扩展,它被引入到ActionScript 3.0中,极大地简化了XML数据处理的过程。在Flash 5时,ActionScript...

    Flex之URLLoader加载XML

    在Flex开发中,`URLLoader` 是一个非常重要的类,用于加载远程数据,如XML、JSON等。在本示例中,它被用来从服务器获取XML文件并将其内容解析为XML对象,以便在应用程序中使用。`Flex` 是Adobe开发的一个开放源代码...

    ArcGIS Flex API 中的 Flex 技-xml解析

    2. **遍历XML文档**:可以通过多种方式遍历XML文档,如深度优先遍历(Depth-First Traversal)或宽度优先遍历(Breadth-First Traversal)。在Flex中,通常使用AS3(ActionScript 3)提供的XML类来进行遍历操作。 #...

    flex中tree的数据源是xml

    - 遍历DataTable中的每一行数据,创建对应的XML节点。 - 使用`CreateElement`、`CreateAttribute`等方法构造节点及其属性。 - 通过`AppendChild`方法添加子节点至父节点。 4. **保存XML文件**: - 最终将构建好...

    Flex操作XML实现增删改查.pdf

    在Flex开发中,XML是一种常见的数据格式,用于存储和传输数据。XML(eXtensible Markup Language)具有自描述性,结构清晰,易于解析,因此在Flex应用中常用于实现数据的增删改查功能。以下我们将深入探讨如何在Flex...

    flex外部读取xml

    这个方法会遍历XML的指定标签并创建一个`BaseXmlModel`的集合。 - 对于`Node`,创建`BaseNodeContainer`实例,初始化并添加到容器中,同时在`nodeMap`中存储以ID为键的映射关系。 - 对于`Line`,根据起始和结束ID...

    flex xml 生成

    // 遍历XML节点,添加缩进 // ... return result; } } ``` 5. **动态XML生成**:在Flex应用中,常常需要根据运行时的数据动态生成XML。例如,从服务器获取数据后,可以将其转换为XML,然后展示在Flex界面中: ``...

    Flex:ArrayCollection转xml形式的实例

    接着,我们遍历ArrayCollection中的每个元素,将其包装为`&lt;fruit&gt;`节点,并添加到XML文档中。最后,我们将整个XML文档转换为字符串并输出。 这个实例对于理解数据转换非常有用,特别是在处理与服务器之间的数据交换...

    flex读取试卷的xml文件 并做成考试系统

    在构建一个基于Flex的在线考试系统时,XML文件通常被用作存储试题和答案的数据格式。这是因为XML(Extensible Markup Language)具有结构清晰、易于解析和跨平台的优点,非常适合存储和传输复杂的数据结构,比如考试...

Global site tag (gtag.js) - Google Analytics