zoukankan      html  css  js  c++  java
  • ActionScript 3.0 Step By Step系列(七):使用XML和XMLList类处理XML数据

         XML--可扩展标记语言,我想看本文的你早已经将他用得滚瓜烂熟了。OK,下面就直奔主题,看看在ActionScript 3.0中是通过什么方式来处理XML数据。

         在ActionScript 3.0中,用于处理XML数据的主要有两个类:XML和XMLList。前者表示单个XML元素,它可以是包含多个子元素的XML文档,也可以是文档中的单值元素。后者表示一组XML元素。

         既然是XML,在ActionScript 3.0中同样有着和C#/Java一样的相关术语,如:文档、元素、节点以及属性等。本文将以XML文档的创建、添加数据、删除数据、查询数据以及加载外部XML文件为中心,详细介绍在ActionScript 3.0中对XML的处理。

         在此之前先来了解下E4X方法。什么是ECMAScript for XML (E4X)方法呢?它是ActionScript 3.0中所提供的一些运算符,用于访问和处理XML数据的特定功能。ActionScript 3.0 包含以下 E4X 类:XML、XMLList、QName 和 Namespace。它们位于flash.xml包下,目的就是为了达到更容易编写和理解用于处理XML数据的代码。

     
    一、创建内部XML文档

         在Flex下要创建一个XML文档是很简单的,可以使用XML对象直接创建,如下所示:

     1 private var pXml:XML= <Root> 
     2                         <Book id="1">
     3                             <Name>ActionScript入门到精通</Name>
     4                             <Author>张三</Author>
     5                             <Price>48.50</Price>
     6                           </Book>
     7                           <Book id="2">
     8                             <Name>ASP.NET高级编程</Name>
     9                             <Author>李四</Author>
    10                             <Price>86.70</Price>
    11                           </Book>    
    12                       </Root>

    二、加载外部XML文档

         除了上面这种创建XML文档的方式外,我们同样可以使用一个外部已存在的xml文档(此xml文档可以是一个xml文件,也可以是一个函数的返回值等),要加载一个外部的xml文档在Flex下可以通过<mx:XML>标签来完成,如下所示:

    1     <mx:XML id="book" source="Data/Book.xml">
    2     
    3     </mx:XML>


        通过上面这中方式载入的XML文档在界面设计的时候就可以直接通过book实例来绑定在界面元素上了。那么我们需要在编程中使用外部XML则需要通过另外一种方式载入XML,既使用URLLoader.load()方法,且还需要设置dataFormat属性为DataFormat.TEXT读取数据,通过complete事件处理函数来转换载入的数据为XML实例,如下代码块:

     1 private function LoadXML():void 
     2 {
     3     //创建URLLloader实例以简单文本形式读取数据
     4     //设置数据装载格式为DataFormat.TEXT
     5     //监听并添加complete事件处理函数
     6     var loader:URLLoader = new URLLoader();
     7     loader.dataFormat = DataFormat.TEXT;
     8     loader.addEventListener(Event.COMPLETE,handlerComplete);
     9     loader.load(new URLRequest("Data/Book.xml"));
    10 }
    11 
    12 private function handlerComplete(event:Event):void
    13 {
    14     var book:XML = new XML(event.target.data);
    15 }

         另外装载外部XML数据还有种情况就是RPC,某种情况下也叫XML-RPC,常见的开发模式通常为服务器端提供调用接口,接口可以为asp,jsp,php,aspx,webservice,wcf等提供的都可以,这里就不多说,详细在以后的文章里介绍。

    三、XML的元素、节点与属性

         在ActionScript 3.0中使用E4X语法创建子元素并添加到XML中,XML对象提供了两个非常使用的方法:insertChildBefort()方法和insertChildAfter()方法,这两个方法都是以当前元素为基础来进行元素的添加。

         要给XML文档节点里添加属性,需要使用“@”操作符。使用很简单,如下所示:

     1 internal function OnClick():void 
     2 {
     3     var book:XML = <book>
     4                              <item></item>
     5                           </book>;
     6     book.item.@id=1;
     7     book.item.@name="ActionScript 3.0";
     8     
     9     Alert.show(book);
    10 }

         下面是添加属性后的xml对象数据:

                         

         

    四、使用XMLList读取XML数据

         XML对象提供了一个返回XMLList类型的方法elements(),既返回所有XML对象的子元素节点,随后我们可以通过for each语句循环则可访问到整个XML数据内容。以上面创建内部XML文档的XML数据为例,详细见如下代码块:

    1 var list:XMLList = pXml.elements();
    2 for each(var element:XML in list)
    3 {
    4     //获取每一个节点的id
    5     Alert.show(element.@id);
    6     trace(element.@id);
    7 }

         这里需要注意一点就是elements()方法只会当前节点的下一级节点,如果XML层次结构比较多还需递归来处理。另外还可以使用“.”操作符来取数据,格式为:根节点.子节点.....元素名称;

    详细大家可以查阅《ActionScript 3.0 Cookbook》这本翻译笔记,里面介绍得非常清楚。

  • 相关阅读:
    【转】Android开发实践:自定义带消息循环(Looper)的工作线程
    【转】 解决IllegalStateException: Can not perform this action after onSaveInstanceState
    【转】Fresco之强大之余的痛楚
    【转】Android 防破解技术简介
    改进版本号的精确数据权限定义和实现
    明天是我的生日,写给24岁的自己
    javascrip cookie
    Servlet -- 跳转到页面后的绝对路径与相对路径的问题
    JAVA訪问URL
    跨浏览器resize事件分析
  • 原文地址:https://www.cnblogs.com/beniao/p/1363859.html
Copyright © 2011-2022 走看看