- 浏览: 78761 次
- 性别:
- 来自: 成都
文章分类
最新评论
-
兩ting:
说实话,我没有装成功。。。
Ubuntu上搭建Flex4的开发环境 -
chenzhou123520:
写得很好,赞一个,不过指出一个小错误引用表 2. IoSess ...
Mina服务器开发入门基础,实例讲解 -
jinx3166:
受益良多!
关于flex不能移除监听器总结 -
兩ting:
Flex太强大了,不过会的人不是很多.精通的人就更少了
Ubuntu上搭建Flex4的开发环境 -
liminjun:
你们平时开发也是用Ubuntu吗?Flex做企业项目还是有很大 ...
Ubuntu上搭建Flex4的开发环境
正文:
对于如下的一个XML文档,在flash中应该怎么读呢?
(图片来自kirupa.com)
按照Using XML in Flash CS3/AS3上的内容,包括了XML结构介绍等内容,在此我不再转述,对XML不怎么了解的话请先移步:XML 系列教程。
这里我分三步描述flash读XML的基本方法,以及外延一个对带命名空间的XML的读取方法,如下目录:
1、加载XML文件;
2、读取XML的数据;
3、过滤数据;
4、读取带命名空间的XML数据;
5、处理gb2312编码的XML;
注:在这里的AS脚本都是在 Adobe Flash CS3 版本以上中进行编写,flex用户请自行添加修改相应的包引用。
下面开始第一部分,如何加载XML文件!
1、加载XML文件
在脚本编辑器中写入以下代码:
var xmlLoader:URLLoader = new URLLoader(); var xmlData:XML = null; xmlLoader.addEventListener(Event.COMPLETE, LoadXML); xmlLoader.load(new URLRequest("http://www.kirupa.com/net/files/sampleXML.xml")); function LoadXML(e:Event):void { xmlData = new XML(e.target.data); trace(xmlData); }
按Ctrl+Enter运行它,你会在输出窗口中看到整个XML的内容:
这里不进行代码解说,关于XML类,请查看:http://help.adobe.com/zh_TW/AS3LCR/Flash_10.0/XML.html
下面进入第2部分:如何读取XML数据。
2、读取XML数据
2.1直接读取XML数据
对XML数据的读取是十分简单的,不信请看:
function LoadXML(e:Event):void { xmlData = new XML(e.target.data); ParseBooks(xmlData); } function ParseBooks(bookInput:XML):void { trace("XML Output"); trace("------------------------"); trace(bookInput.Book); }
可得到如何结果:
XML Output ------------------------ Sir Arthur Conan Doyle F. Scott Fitzgerald Stephen E. Ambrose Stephen E. Ambrose
同样的,把trace的内容改为bookInput.Book.author,会得到下面的结果:
XML Output ------------------------ Sir Arthur Conan Doyle F. Scott Fitzgerald Stephen E. Ambrose Stephen E. Ambrose
而trace(bookInput.Book.author.text());可得到:
XML Output ------------------------ Sir Arthur Conan DoyleF. Scott FitzgeraldStephen E. AmbroseStephen E. Ambrose
同样的,要读具体的节点,可以这样
trace(bookInput.Book.author.text()[0]);
可得到
XML Output ------------------------ Sir Arthur Conan Doyle
2.2、XML和XMLList
这里我们会用到另外一个类XMLList,这个类可以把XML对象作为数组的方式读取,可以方便地进行for each操作。
function ParseBooks(bookInput:XML):void { trace("XML Output"); trace("------------------------"); var authorList:XMLList = bookInput.Book.author; for each (var authorElement:XML in authorList) { trace(authorElement); } }
2.3历遍子元素
function ParseBooks(bookInput:XML):void { trace("XML Output"); trace("------------------------"); var bookChildren:XMLList = bookInput.Book.children(); for each (var bookInfo:XML in bookChildren) { trace(bookInfo); } }
结果如下:
XML Output ------------------------ Sherlock Holmes: Complete Novels and Stories, Vol 1 Sir Arthur Conan Doyle The Great Gatsby F. Scott Fitzgerald Undaunted Courage Stephen E. Ambrose Nothing Like It In the World Stephen E. Ambrose
同样的,我们可以用节点的.name()方法得知它的标签名:
function ParseBooks(bookInput:XML):void { trace("XML Output"); trace("------------------------"); var bookChildren:XMLList = bookInput.Book.children(); for each (var bookInfo:XML in bookChildren) { if (bookInfo.name() == "author") { trace(bookInfo); } } }
这样就可以得到所有author的值了。
2.4读取属性
历遍属性的方法:
function ParseBooks(bookInput:XML):void { trace("XML Output"); trace("------------------------"); var bookAttributes:XMLList = bookInput.Book.attributes(); for each (var bookISBN:XML in bookAttributes) { trace(bookISBN); } }
对于attributes,同样有一个.name()方法:
function ParseBooks(bookInput:XML):void { trace("XML Output"); trace("------------------------"); var bookAttributes:XMLList = bookInput.Book.attributes(); for each (var bookISBN:XML in bookAttributes) { if (bookISBN.name() == "ISBN") { trace(bookISBN); } } }
另外还有一种更直接的方法,直接用.attribute(“ISBN”) :
function ParseBooks(bookInput:XML):void { trace("XML Output"); trace("------------------------"); var bookAttributes:XMLList = bookInput.Book.attribute("ISBN"); for each (var bookISBN:XML in bookAttributes) { trace(bookISBN); } }
注意,这个.attribute(attributeName:*)方法不是.attributes()哦,少了个s的哦。
3、过滤数据
3.1过滤值
function ParseBooks(bookInput:XML):void { trace("XML Output"); trace("------------------------"); var authorList:XMLList = bookInput.Book.(author == "Stephen E. Ambrose"); trace(authorList); }
可得到:
XML Output ------------------------ <Book ISBN="0684826976"> <title>Undaunted Courage</title> <author>Stephen E. Ambrose</author> </Book> <Book ISBN="0743203178"> <title>Nothing Like It In the World</title> <author>Stephen E. Ambrose</author> </Book>
所以在过滤之后,可以同样使用
var authorList:XMLList = bookInput.Book.(author == "Stephen E. Ambrose").title;
得到所有作者是Stephen E. Ambrose的书名了。
3.2过滤属性
function ParseBooks(bookInput:XML):void { trace("XML Output"); trace("------------------------"); var bookList:XMLList = bookInput.Book.(@ISBN == "0743203178").title; trace(bookList); }
我们还可以进行一些复杂的过滤:
function ParseBooks(bookInput:XML):void { trace("XML Output"); trace("------------------------"); var bookList:XMLList = bookInput.Book.(author == "Stephen E. Ambrose" && title != "Nothing Like It In the World").title; trace(bookList); }
4、读取带命名空间的XML数据
如果把上面的XML文件改一改,变成如下:
<Books xmlns:g="http://guitarbean.com/"> <Book ISBN="0553212419"> <title>Sherlock Holmes: Complete Novels and Stories, Vol 1</title> <author>Sir Arthur Conan Doyle</author> </Book> <Book ISBN="0743273567"> <title>The Great Gatsby</title> <author>F. Scott Fitzgerald</author> </Book> <Book ISBN="0684826976"> <title>Undaunted Courage</title> <author>Stephen E. Ambrose</author> </Book> <Book ISBN="0743203178"> <title>Nothing Like It In the World</title> <author>Stephen E. Ambrose</author> <g:cost>XXXXXXX</g:cost> </Book> </Books>
这时要用到Namespace类了:
function ParseBooks(bookInput:XML):void { trace("XML Output"); trace("------------------------"); var g:Namespace = new Namespace("http://guitarbean.com/"); trace(bookInput.Book.g::cost); }
可得到:
XML Output ------------------------ XXXXXXX
这里的双冒号(::)就是命名空间符,只要建立了一Namespace对象,XML对象便可直接用点运算符来操作了,相对的比较方便。
5、处理gb2312编码的XML
有的XML文件可能不是UTF8的,如在中国常用的gb2312编码,侧需要转码一下,这时要用到ByteArray类,在建立XML对象前统一处理下即可:
var xmlLoader:URLLoader = new URLLoader(); var xmlData:XML = null; xmlLoader.addEventListener(Event.COMPLETE, LoadXML); xmlLoader.load(new URLRequest("http://www.kirupa.com/net/files/sampleXML.xml")); function LoadXML(e:Event):void { var BA:ByteArray = new ByteArray; BA.writeBytes((e.target as URLLoader).data); BA.position = 0; //把gb2312转为UTF8编码: var newData:String = BA.readMultiByte(BA.length,"gb2312"); //然后才建立XML对象: xmlData = new XML(newData); trace(xmlData); }
发表评论
-
BlazeDS的功能原理及配置实例
2013-05-01 23:26 1186BlazeDS Test Drive里面示例了主要的功能: ... -
Flex与Severlet(Jsp)通信传递中文参数乱码问题的解决
2013-02-19 15:51 726Java代码 var url ... -
Java与Flex建立Socket连接
2013-02-17 23:42 898Socket与其他的通信技术最大的不同是Socket连接在数 ... -
Ubuntu上搭建Flex4的开发环境
2013-02-15 20:58 1242原文出自:http://www.brighthub.com/ ... -
flex web应用程序生成自定义右键菜单
2013-01-25 17:13 1108屏蔽浏览器的鼠标右键,同时监听鼠标右键,当触发右键点击事件的 ... -
Flex通过HTTPService与servlet通信
2013-01-16 15:03 1036Flex通过HTTPService与servlet通信 ... -
flex摄像头连接视频录制
2012-12-25 23:55 1660Flex提供了3个类实 ... -
Flex中多线程的实现(摘)
2012-12-25 19:49 1307Flex中多线程的实现 最近在网上看到一个工具 ... -
flash builder 4.7 install for windows 8
2012-12-23 01:02 1341之前在自己的win8上集成fb到myecl ... -
flex load map
2012-12-21 15:48 1017ArcGIS Server flex加载google地图 ... -
Flex与JavaScript交互调用函数
2012-12-21 09:43 895一、在JavaScript中调用Flex方法 在 Flex ... -
关于flex不能移除监听器总结
2012-12-20 00:07 1926首先看我从网上转载了一篇文章: <!--------- ... -
Flex中TitleWindow关闭按钮CloseButton的定制问题
2012-11-29 16:01 1212问题:TitleWindow的关闭 ... -
flex学习之联动下拉框实现
2012-11-27 12:55 1322Java代码 TbArea.java ... -
flex中弹出确认对话框
2012-11-22 16:30 863Xml代码 <?xml versi ... -
MessageBroker /amf
2012-11-20 10:58 946MessageBroker 我们称他为信息经纪人,它职责就是把 ... -
Flex3 组件的定位和布局
2012-11-18 19:22 805Flex 组件的定位和布局 大多数 Flex 容器使用预定义 ... -
Flex异步令牌AsyncToken的用法介绍
2012-11-15 09:28 738什么是AsyncToken?官方文档是这样描述的:" ... -
Flex布局简介
2012-11-14 14:38 833★设置组件布局 对于所有的继承自UIComponent的组件包 ... -
Flex编程注意之直接获取某个组件的对象(this[]用法)
2012-11-14 13:09 670有这样一个需求:假如你new了一百次Button,同时这 ...
相关推荐
本文将深入探讨如何在Flex中解析XML数据,以及相关的工具和技术。 1. XML基础 XML(Extensible Markup Language)是一种自定义标记语言,用于存储和传输结构化数据。它的结构清晰,易于人和机器阅读。XML文档由元素...
本文将深入探讨如何使用Flex解析XML框架,结合HTTPService组件,实现从服务器接收并解析XML数据的实例。 首先,让我们理解Flex中的XML类。XML类是ActionScript 3.0中的一个核心类型,它提供了一种强大而灵活的方式...
本文将深入探讨Flex如何解析XML文件。 首先,让我们了解一下XML(Extensible Markup Language)。XML是一种结构化数据语言,用于存储和传输数据,它的结构清晰,易于机器和人阅读。在Flex中,XML通常用于从服务器...
本篇文章将深入探讨如何使用Flex解析XML文件,并通过HTTPService来读取XML内容,以及如何根据需求过滤字符串并获取所需值。 首先,让我们了解Flex中的XML类。XML类是ActionScript 3.0中用于处理XML文档的主要工具,...
2. **解析XML**:接收到XML响应后,Flex应用使用`XML`类解析XML数据,将其转换为AS3对象。 3. **数据绑定**:将解析后的数据绑定到Flex应用的UI组件上,如数据网格或列表,以展示股票价格信息。 #### 结论 Flex与...
本实例将探讨如何在Flex中解析XML,以读取XML标签并获取信息。 首先,XML(eXtensible Markup Language)是一种结构化数据语言,它的主要特点是结构清晰、易于阅读和编写,并且可以被机器和人类同时理解。在Flex中...
1. 使用XML类:在Flex中,我们可以直接创建XML对象来解析XML文档。首先,我们需要导入`mx.utils.XMLUtil`库,然后使用`XMLUtil.parse()`方法将XML字符串转换为XML对象。例如: ```actionscript var xmlStr:String = ...
对于ArcGIS Flex API而言,理解如何解析XML至关重要,尤其是在处理地理信息时。本文将详细介绍如何使用ArcGIS Flex API进行XML解析,并通过一个具体示例来阐述其应用场景。 #### 二、XML在ArcGIS Flex API中的重要...
1. `<mx:Script>` 标签内包含了ActionScript代码,用于处理加载和解析XML的过程。 - `import` 语句导入了必要的类,如 `mx.collections.ArrayCollection` 和 `mx.rpc.events.ResultEvent`。 - `public var loader:...
XML类允许我们创建、操作和解析XML文档。以下是一个简单的示例,展示如何将ArrayCollection转换为XML: ```actionscript import mx.collections.ArrayCollection; import flash.xml.XMLDocument; var ...
1. **XML解析**:在Flex中,我们可以使用`mx:XML`组件或`flash.xml.XMLDocument`类来解析XML数据。XML是一种常见的数据格式,用于存储和传输结构化数据。在示例中,XML可能包含一系列可选项,这些选项将被用作...
XMLLoader是ActionScript 3中的一个类,专门用于加载和解析XML文档。使用XMLLoader,可以异步加载XML,这意味着主程序不会因为等待XML加载而阻塞。下面是一个简单的使用XMLLoader的例子: ```actionscript var ...
ActionScript还支持XML和JSON解析,使得与服务器的数据交换更为便捷。 2. **Flex与Java数据交互**:BlazeDS是Adobe提供的一个免费服务器端技术,用于在Flex客户端和Java服务器之间进行实时数据通信。通过BlazeDS,...
以下是如何使用HTTPService来获取并解析XML数据的步骤: (1)导入必要的库: ```actionscript import mx.rpc.http.HTTPService; import flash.events.Event; ``` (2)创建HTTPService实例,并配置URL和方法: ``...
Flex是一个强大的框架,允许开发者通过MXML语言(一种基于XML的语言)结合ActionScript 3构建复杂的Flash应用程序。其与JSON和XML的互操作能力,使得Flex能够轻松地与服务器端进行数据交换,从而创建出响应迅速且...
综上所述,Flex中的XML操作涉及文件系统访问、网络通信、数据解析等多个方面,熟练掌握这些技能对于构建Flex应用至关重要。在实际项目中,根据具体需求灵活运用这些知识点,可以实现高效的数据管理和交换。
3. 在Flex客户端接收XML:在Flex中,可以使用URLLoader类加载XML数据,然后使用XMLDecoder解析XML字符串为XML对象。 ```actionscript var urlLoader:URLLoader = new URLLoader(); urlLoader.dataFormat = ...
3. 解析XML数据:加载完成后,可以使用`XML`类的方法和属性来解析XML数据。例如,获取根节点的子节点,遍历节点,获取属性值等。 接下来,让我们看看如何将XML数据转化为考试试卷。假设XML文件结构如下: ```xml ...