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

利用 E4X解决 XML 处理的性能问题

    博客分类:
  • flex
阅读更多
http://www.blogjava.net/rosen/archive/2008/12/23/247983.html

要解决 XML 处理的性能问题。就应该好好的利用 E4X,尽量避免在解析 XML 的过程中使用循环。这里介绍几篇文章让大家了解下《E4X:出色的 JavaScript》、《E4X 教程》、《AS3中新的XML处理方法 – E4X》。E4X给我最大的便利就是..运算符。思考下面的XML:
var myXML:XML =
                 < groups  name ="大组" > 
                     < group  name ="小牛组" > 
                         < person  fullname ="rosenjiang" /> 
                         < person  fullname ="abc" /> 
                     </ group > 
                     < group  name ="柴鸡组" > 
                         < person  fullname ="rosenjiang" /> 
                     </ group > 
                     < group  name ="柴鸭组" > 
                         < person  fullname ="rosenjiang" /> 
                         < person  fullname ="rosen jiang" /> 
                     </ group > 
                     < group  name ="独立大队" > 
                         < person  fullname ="rosenjiang" /> 
                     </ group > 
                    </ groups > ;

要得到所有属性fullname是”rosenjiang”的person节点的个数怎么做?在没详细了解 E4X 之前,我会用 myXML.group 操作得到 group 的 XMLList 集合,然后再用循环去找寻每个 group 中 person 节点属性 fullname 为”rosenjiang”的数据:
               function on_click(): void {
                   var list:XMLList  =  myXML.group;
                   var count: int   =   0 ;
                    for (var i: int = 0 ; i < list.length(); i ++ ){
                       var persons:XMLList  =  list[i].person;
                        if (persons.length()  ==   1   &&  persons.@fullname  ==   " rosenjiang " ){
                           count  ++ ;
                       } else {
                            for (var j: int = 0 ; j < persons.length(); j ++ ){
                                if (persons[j].@fullname  ==   " rosenjiang " ){
                                   count  ++ ;
                               }
                           }
                       }
                   }
                   Alert.show(count + " 个 " );
               }

上面的写法的确很傻,下面是改进之后的代码,关键部分只有一行:
               function on_click(): void {
                   var list:XMLList  =  myXML..person.(@fullname  ==   " rosenjiang " );
                   Alert.show(list.length() + " 个 " );

               }
通过合理使用 E4X 语法,顺利的避免了循环带来的性能问题。过了几天,来个新的需求,需要统计出在这个 XML 中有几个不同姓名的 person。思考片刻,我可不可以用眼睛数出来啊?这里有 3 个...... 好吧,看来又是循环问题,第一个想到的是用两个嵌套 for 循环来进行排除处理,这是最直观的想法......
下面我介绍下如何用 ArrayCollection 并只使用一个循环来计算个数。由于 Flex 里面不支持 Map 类型,而我 Google 了一圈,且 RIACN 论坛上网友的 Map 实现性能都不行,遂打算用 ArrayCollection 模拟 Map 进行操作:
               import  mx.collections. * ;
               function on_click(): void {
                   var list:XMLList  =  myXML..person;
                   var ac:ArrayCollection  =   new  ArrayCollection();
                 for  each (var item:XML in list){
                    var fullname:String  =  item.@fullname;
                     if (ac.getItemIndex(fullname)  ==   - 1 ){
                        ac.addItem(fullname);
                    }
                }
                   Alert.show(ac.length + " 个 " );
               }

上面代码没什么过多解释,思路是取出一个 fullname 放进 ArrayCollection,然后判定下一个 fullname 是否存在于 ArrayCollection 中,如果存在就跳过,不存在就放进去再取下一个。另外我发现,使用 for each 比单纯的使用 for 性能要高一点点。
分享到:
评论

相关推荐

    Foundation+XML+and+E4X+for+Flash+and+Flex And sourcecode

    4. Flash和Flex中的XML应用:展示如何在ActionScript中使用E4X处理XML,包括加载、解析、修改XML文档,并在Flex组件中显示XML数据。 5. 数据绑定:探讨Flex中的数据绑定机制,如何将XML数据直接绑定到UI组件,实现...

    AJAX及使用E4X编写Web服务脚本系列

    E4X(ECMAScript for XML)是JavaScript的一个扩展,旨在简化XML处理,使JavaScript可以更加方便地创建、操作和解析XML文档。E4X将XML直接集成到JavaScript语法中,使得XML数据可以直接作为JavaScript对象进行操作,...

    利用XML动态生成Flash

    6. **优化性能**:为了提高性能,可以考虑使用E4X(ECMAScript for XML),这是ActionScript 3中内置的XML处理机制,它允许更直接和高效地操作XML。 通过这种结合,XML和Flash可以实现强大的动态内容生成,使开发者...

    FlashXML编程资源

    10. **优化性能**:虽然XML处理可能会影响性能,但通过合理的设计和优化,如使用E4X(ECMAScript for XML)语法,可以提高处理效率。 在压缩包"flashxml"中,可能包含了各种示例代码、教程文档或预设的Flash模板,...

    E4A悬浮窗类库,面板悬浮窗类库

    E4A类库通常包含事件监听器,如`OnTouchEvent(event)`,开发者可以通过编写事件处理函数来响应用户交互。 5. **权限管理**: 创建悬浮窗可能需要在AndroidManifest.xml中声明相应的权限,例如`android.permission....

    【AS3.0教程爽快使用XML】

    相比之下,AS3.0则遵循ECMAScript for XML (E4X)标准,这是一种专为简化JavaScript与XML交互而设计的标准。这意味着在AS3.0中,可以直接将XML作为内置类型进行处理,无需额外的库支持,大大提高了开发效率和代码的...

    Xpath + XMLSchema + AS3参考手册

    在处理XML数据时,AS3提供了XML类和E4X(ECMAScript for XML),使得在AS3中解析、操作和序列化XML变得非常直观。例如,可以使用`new XML()` 创建XML对象,然后通过XPath选择器获取特定节点,如`xml.book[0]`。 在...

    Flex操作XML实现增删改查[借鉴].pdf

    - **查询(Query)**:利用XPath(XML Path Language)表达式查找XML树中的特定节点,或者使用E4X(ECMAScript for XML)的语法进行查询。 例如,要添加一个新的元素,你可以这样操作: ```as3 var newNode:XML = ...

    AS3+xml下拉菜单_下拉弹出框菜单

    AS3.0中可以使用`XMLList`或`E4X`(ECMAScript for XML)来解析XML文档,并将其数据绑定到UI组件上。这使得动态生成和更新菜单变得简单。 3. **下拉菜单的实现**: 下拉菜单通常由一个触发按钮和一个隐藏的列表...

    Hello-Flex-4

    E4X(ECMAScript for XML)是ActionScript 3中对XML的内置支持,它允许开发者直接在ActionScript代码中处理XML,如同操作普通变量一样,极大地简化了XML的解析和操作。 书中可能详细介绍了如何设置Flash Builder 4...

    给所有flash网站加个后台

    通过XMLSocket类或者URLLoader类,ActionScript可以从服务器获取XML数据,并利用E4X(ECMAScript for XML)语法进行解析和操作。例如,我们可以通过以下代码加载并解析XML: ```actionscript var loader:URLLoader ...

    ActionScript3.0

    在性能方面,AS3使用了ECMAScript for XML (E4X) 支持XML处理,使得与XML数据的交互变得简单。同时,AS3支持位运算,这在处理图像和像素级操作时非常有用。此外,AS3还引入了垃圾回收机制,自动管理内存,减轻了...

    intra-mart

    - **E4X的使用**:E4X(Extension for XML)是ECMAScript的一个扩展,用于更简便地操作XML数据,intra-mart支持E4X的使用,使得XML处理更加高效。 - **JSSP-RPC的介绍**:这是一种用于远程过程调用的机制,允许...

    Cleaning your website with Ajax_Creating Next-Generation, Highly Dynamic, Off-line Capable

    正确的使用JavaScript,包括进行单元测试和利用E4X简化XML处理等,可以显著提升开发效率和应用质量。 5. **Ajax框架与工具**:各种Ajax框架(如jQuery)和工具(如Dojo Toolkit)的出现极大地简化了Ajax的开发流程,...

    Essential ActionScript 3.0 真正的中文版本

    - **E4X 概念**:E4X 是一种专为XML数据处理而设计的语言扩展。 - **XML 对象**:如何创建、读取和修改XML文档。 10. **安全体系** - **沙箱策略**:为了保护用户的安全,Flash Player 采用沙箱机制限制应用...

    Ajax技术综述

    随着浏览器技术的进步,Ajax技术体系也在不断扩展,如Firefox等支持SVG(Scalable Vector Graphics)矢量图,JavaScript 2.0(E4X)提供了XML处理的扩展,Canvas则允许在浏览器中绘制图形,实现类似游戏的应用。...

    Flex试题 .txt

    E4X(ECMAScript for XML)是一种用于处理XML数据的语言扩展。在Flex中,E4X使得XML解析和操作更加直观和高效。然而,E4X在某些现代版本的ActionScript中已被弃用,转而推荐使用XML解析库或JSON格式。 ### 37. 如何...

    全套源码-聊天室 ActionScript 3.0实现

    - **E4X**:AS3支持嵌入式XML语法(E4X),可以方便地读取、写入和操作XML文件,如`catalog.xml`可能是用来存储聊天记录或者配置信息的。 5. **数据序列化和反序列化** - **JSON**:为了在客户端和服务器之间交换...

    ActionScript_3[1].0_For_Flash_CS5.pdf

    - **ECMAScript for XML (E4X)**:ActionScript 3.0 实现了 E4X 规范,简化了 XML 操作的过程,使得 XML 处理变得更加自然流畅。 - **正则表达式**:ActionScript 3.0 包含了对正则表达式的全面支持,使得字符串...

Global site tag (gtag.js) - Google Analytics