`
全能骑士
  • 浏览: 68480 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

flex处理XML(一)基础

    博客分类:
  • FLEX
阅读更多
FLEX处理XML,ECMAScript For XML(e4x)

var myXML:XML =
<order>
<item id='1'>
<menuName>burger</menuName>
<price>3.95</price>
</item>
<item id='2'>
<menuName>fries</menuName>
<price>1.45</price>
</item>
</order>



trace(myXML.item[0].menuName); // 输出:burger
trace(myXML.item.(@id==2).menuName); // 输出:fries
trace(myXML.item.(menuName=="burger").price); // 输出:3.95


使用 appendChild() 方法可为 XML 分配一个新的子节点

使用 @ 和 . 运算符不仅可以读取数据,还可以分配数据,如下所示:
myXML.item[0].menuName="regular burger";
myXML.item[1].menuName="small fries";
myXML.item[2].menuName="medium cola";
myXML.item.(menuName=="regular burger").@quantity = "2";
myXML.item.(menuName=="small fries").@quantity = "2";
myXML.item.(menuName=="medium cola").@quantity = "2";


使用 for 循环可以循环访问 XML 的节点,如下所示:
var total:Number = 0;
for each (var property:XML in myXML.item)
{
var q:int = Number(property.@quantity);
var p:Number = Number(property.price);
…..
{
trace("Total: $", total.toFixed(2));




可将 XML 文本赋予 XML 对象,如下所示:
var myXML:XML =
<order>
<item id='1'>
<menuName>burger</menuName>
<price>3.95</price>
</item>
<item id='2'>
<menuName>fries</menuName>
<price>1.45</price>
</item>
</order>
如下面的代码片断所示,还可以使用 new 构造函数从包含 XML 数据的字符串创建 XML 对
象的实例:
var str:String = "<order><item id='1'><menuName>burger</menuName>"
+ "<price>3.95</price></item></order>";
var myXML:XML = new XML(str);




要从 URL 加载 XML 数据,请使用 URLLoader 类,如下面的示例所示:
import flash.events.Event;
import flash.net.URLLoader;
import flash.net.URLRequest;
var externalXML:XML;
var loader:URLLoader = new URLLoader();
var request:URLRequest = new URLRequest("xmlFile.xml");
loader.load(request);
loader.addEventListener(Event.COMPLETE, onComplete);
function onComplete(event:Event):void
{
var loader:URLLoader = event.target as URLLoader;
if (loader != null)
{
externalXML = new XML(loader.data);
trace(externalXML.toXMLString());
}
else
{
trace("loader is not a URLLoader!");
}
}

使用 prependChild() 方法或 appendChild() 方法可在 XML 对象属性列表的开头或结尾
添加属性,如下面的示例所示:
var x1:XML = <p>Line 1</p>
var x2:XML = <p>Line 2</p>
var x:XML = <body></body>
x = x.appendChild(x1);
x = x.appendChild(x2);
x = x.prependChild(<p>Line 0</p>);
// x == <body><p>Line 0</p><p>Line 1</p><p>Line 2</p></body>

使用 insertChildBefore() 方法或 insertChildAfter() 方法在指定属性之前或之后添加
属性,如下所示:
var x:XML =
<body>
<p>Paragraph 1</p>
<p>Paragraph 2</p>
</body>
var newNode:XML = <p>Paragraph 1.5</p>
x = x.insertChildAfter(x.p[0], newNode)
x = x.insertChildBefore(x.p[2], <p>Paragraph 1.75</p>)
如下面的示例所示,还可以使用大括号运算符({ 和 })在构造 XML 对象时按引用(从其
它变量)传递数据:
var ids:Array = [121, 122, 123];
var names:Array = [["Murphy","Pat"], ["Thibaut","Jean"], ["Smith","Vijay"]]
var x:XML = new XML("<employeeList></employeeList>");
for (var i:int = 0; i < 3; i++)
{
var newnode:XML = new XML();
newnode =
<employee id={ids[i]}>
<last>{names[i][0]}</last>
<first>{names[i][1]}</first>
</employee>;
x = x.appendChild(newnode)
}
可以使用 = 运算符将属性 (property) 和属性 (attribute) 赋予 XML 对象,如下所示:
var x:XML =
<employee>
<lastname>Smith</lastname>
</employee>
x.firstname = "Jean";
x.@id = "239";
这将对 XML 对象 x 进行如下设置:
<employee id="239">
<lastname>Smith</lastname>
<firstname>Jean</firstname>
</employee>

可以使用 + 和 += 运算符连接 XMLList 对象:
var x1:XML = <a>test1</a>
var x2:XML = <b>test2</b>
var xList:XMLList = x1 + x2;
xList += <c>test3</c>


这将对 XMLList 对象 xList 进行如下设置:
<a>test1</a>
<b>test2</b>
<c>test3</c>


myXML.book 是一个 XMLList 对象,它包含名为 book 的 myXML 对象的子属性。
myXML..lastName 是一个 XMLList 对象,它包含名为 lastName 的任何后代属性。


parent() 方法返回 XML 对象的父项。
可以使用子级列表的序数索引值访问特定的子对象。例如,假设 XML 对象 myXML 有两个名
为 book 的子属性。每个名为 book 的子属性都有一个与之关联的索引编号:
myXML.book[0]
myXML.book[1]
要访问特定的孙项,可为子项和孙项名称同时指定索引编号:
myXML.book[0].title[0]
不过,如果 x.book[0] 只有一个子项名为 title,则可以省略索引引用,如下所示:
myXML.book[0].title
同样,如果对象 x 只有一个 book 子对象,并且如果该子对象只有一个 title 对象,则可以同
时省略两个索引引用,如下所示:
myXML.book.title
可以使用 child() 方法导航到名称基于变量或表达式的子项,如下面的示例所示:
var myXML:XML =
<order>
<book>
<title>Dictionary</title>
</book>
</order>;
var childName:String = "book";
trace(myXML.child(childName).title) // 输出:Dictionary


使用 @ 符号(属性标识符运算符)可以访问 XML 或 XMLList 对象的属性,如下面的代码
所示:
var employee:XML =
<employee id="6401" code="233">
<lastName>Wu</lastName>
<firstName>Erin</firstName>
</employee>;
trace(employee.@id); // 6401


可以一起使用 * 通配符和 @ 符号来访问 XML 或 XMLList 对象的所有属性,如下面的代码
所示:
var employee:XML =
<employee id="6401" code="233">
<lastName>Wu</lastName>
<firstName>Erin</firstName>
</employee>;
trace(employee.@*.toXMLString());
// 6401
// 233


可以使用 attribute() 或 attributes() 方法访问 XML 或 XMLList 对象的特定属性或
所有属性,如下面的代码所示:
var employee:XML =
<employee id="6401" code="233">
<lastName>Wu</lastName>
<firstName>Erin</firstName>
</employee>;
trace(employee.attribute("id")); // 6401
trace(employee.attribute("*").toXMLString());
// 6401
// 233
trace(employee.attributes().toXMLString());
// 6401
// 233

请注意,还可以使用以下语法访问属性,如下面的示例所示:
employee.attribute("id")
employee["@id"]
employee.@["id"]
其中每一个都等效于 employee.@id。不过,语法 employee.@id 是首选方法。


可以使用括号运算符 — ( 和) — 过滤具有特定元素名称或属性值的元素。请考虑下面的
XML 对象:
var x:XML =
<employeeList>
<employee id="347">
<lastName>Zmed</lastName>
<firstName>Sue</firstName>
<position>Data analyst</position>
</employee>
<employee id="348">
<lastName>McGee</lastName>
<firstName>Chuck</firstName>
<position>Jr. data analyst</position>
</employee>
</employeeList>

遍历 XML 结构以下表达式都是有效的:
■ x.employee.(lastName == "McGee") — 这是第二个 employee 节点。
■ x.employee.(lastName == "McGee").firstName — 这是第二个 employee 节点的
firstName 属性。
■ x.employee.(lastName == "McGee").@id — 这是第二个 employee 节点的 id 属性的值。
■ x.employee.(@id == 347) — 第一个 employee 节点。
■ x.employee.(@id == 347).lastName — 这是第一个 employee 节点的 lastName 属性。
■ x.employee.(@id > 300) — 这是具有两个 employee 属性的 XMLList。
■ x.employee.(position.toString().search("analyst") > -1) — 这是具有两个
position 属性的 XMLList。

如果试图按照可能不存在的属性或元素过滤,Adobe Flash Player 将引发异常。例如,以下
代码的最后一行产生一个错误,因为第二个 p 元素中没有 id 属性:
var doc:XML =
<body>
<p id='123'>Hello, <b>Bob</b>.</p>
<p>Hello.</p>
</body>;
trace(doc.p.(@id == '123'));
同样,以下代码的最后一行也会产生一个错误,因为第二个 p 元素没有 b 属性:
var doc:XML =
<body>
<p id='123'>Hello, <b>Bob</b>.</p>
<p>Hello.</p>
</body>;
trace(doc.p.(b == 'Bob'));
为了避免这些错误,可以使用 attribute() 和 elements() 方法来识别具有匹配属性或元素
的属性,如下面的代码所示:
var doc:XML =
<body>
<p id='123'>Hello, <b>Bob</b>.</p>
<p>Hello.</p>
</body>;
trace(doc.p.(attribute('id') == '123'));
trace(doc.p.(elements('b') == 'Bob'));


还可以使用 hasOwnProperty() 方法,如下面的代码所示:
var doc:XML =
<body>
<p id='123'>Hello, <b>Bob</b>.</p>
<p>Hello.</p>
</body>;
trace(doc.p.(hasOwnProperty('@id') && @id == '123'));
trace(doc.p.(hasOwnProperty('b') && b == 'Bob'));



ActionScript 3.0 包含用于循环访问 XMLList 对象的 for..in 语句和 for each..in 语
句。例如,我们来看 XML 对象 myXML 和 XMLList 对象 myXML.item。XMLList 对象
myXML.item 由 XML 对象的两个 item 节点组成。
var myXML:XML =
<order>
<item id='1' quantity='2'>
<menuName>burger</menuName>
<price>3.95</price>
</item>
<item id='2' quantity='2'>
<menuName>fries</menuName>
<price>1.45</price>
</item>
</order>;


for..in 语句用于循环访问 XMLList 中的一组属性名称:
var total:Number = 0;
for (var pname:String in myXML.item)
{
total += myXML.item.@quantity[pname] * myXML.item.price[pname];
}
for each..in 语句用于循环访问 XMLList 中的属性:
var total2:Number = 0;
for each (var prop:XML in myXML.item)
{
total2 += prop.@quantity * prop.price;
}
分享到:
评论

相关推荐

    Flex里解析XML数据

    在Flex中,我们可以使用ActionScript 3(AS3)的XML类来处理XML数据。 2. Flex中的XML解析 在Flex中,XML对象提供了一种灵活的方式来创建、操作和解析XML文档。通过实例化XML类,我们可以加载XML数据并对其进行解析...

    flex 操作XML

    - Flex提供了`mx.utils.ObjectProxy`类和`mx.rpc.xml.XMLUtil`类来处理XML。你可以使用`new XML()`创建一个空的XML对象,并通过`.addChild()`、`.appendChild()`等方法添加元素。 3. **读取本地XML文件**: - ...

    一个Flex xml MP3播放器

    【Flex XML MP3播放器详解】 Flex是一种基于ActionScript 3.0的开源框架...通过学习这个项目,开发者不仅可以掌握Flex的基本用法,还能了解到XML数据驱动、事件处理、组件应用等核心概念,为开发更复杂的RIA奠定基础。

    flex上:简单的将xml内容生成文件存到本地的一个小例子

    Flex提供了一种强大而灵活的方式来处理XML数据。在Flex中,XML可以作为一个变量、对象或者通过XMLList来处理。XML对象提供了丰富的API,如addChild、toString等,使得在程序中操作XML变得简单。 2. **XML内容生成*...

    flex中tree的数据源是xml

    ### Flex中Tree的数据源是XML 在Flex应用开发过程中,我们常常需要用到树形结构(Tree)来展示分层数据。为了使数据呈现更加灵活且高效,通常会采用XML作为数据...同时,这也为今后的学习和实践提供了一个良好的基础。

    flex xml生成tree 源码

    本代码示例不仅展示了如何在Flex中使用XML数据构建动态树形结构,还涉及了Flex框架的基础知识,包括MXML语言、数据绑定、事件处理等关键概念。对于想要学习Flex开发的初学者来说,这是一个很好的实践案例,有助于...

    flex 解析xml绑定到combobox点击按钮把combobox所选的数据添加到List

    这个小例子展示了Flex中基本的数据绑定、XML解析、用户交互和组件间的通信,是构建更复杂应用的基础。理解这些概念对于开发Flex应用至关重要,因为它们构成了Flex应用数据流和用户交互的核心机制。

    Flex导入XML播放列表(内有注释)MP3播放器

    在本文中,我们将深入探讨如何使用Adobe Flex技术创建一个功能丰富的MP3播放器,该播放器能够导入XML播放列表,并具备一系列控制功能。这个播放器不仅允许用户播放、暂停、停止音频,还支持切换至上一首或下一首曲目...

    Foundation XML and E4X for Flash and Flex

    它是一种用于标记数据的语言,能够帮助开发者在不同平台之间传输数据,是Web服务和RSS等技术的基础。对于使用Flash和Flex进行开发的专业人士来说,掌握XML及其应用方式至关重要。 #### 二、ActionScript 3.0中的XML...

    flex第一步全部源码

    在本文中,我们将深入探讨Flex的基础知识,包括其核心概念、开发环境搭建、源码结构以及如何通过"library.swf"和"catalog.xml"这两个文件理解Flex的应用。 1. Flex框架概述: Flex提供了强大的组件库,可以创建具有...

    flex爱好者的基础教程

    这个“flex爱好者的基础教程”旨在为初学者提供一个深入理解Flex的基础平台,帮助他们掌握这一强大的开发工具。 一、Flex概述 Flex是一种开放源代码的框架,主要用来构建具有交互性、动态图形和数据集成的Web应用...

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

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

    Flex中文基础教程

    ### Flex中文基础教程知识点概述 #### 一、Flex的基本概念 **Flex** 是一款由Adobe推出的开源框架,用于创建高质量的、跨平台的富互联网应用(Rich Internet Applications, RIA)。Flex结合了强大的编程功能与视觉...

    Flex实例 Flex基础 Web+Flex+LCDS Flex跟Java交互

    1. **Flex基础**:Flex提供了一整套组件库,包括按钮、文本输入框、列表等,使得开发者可以快速构建具有专业外观和交互性的用户界面。MXML是一种声明式语言,用于布局组件和定义应用程序结构,而ActionScript则是一...

    flex-demo(读取xml文件)

    通过这个Flex-demo项目,学习者可以了解如何在Flex环境中处理XML数据,包括解析XML、将数据绑定到UI组件(如DataGrid)以及如何在MyEclipse中进行开发和调试。这将帮助他们掌握Flex的基础知识和实际应用技巧。

    Foundation.XML.and.E4X.for.Flash.and.Flex.2009

    E4X是ActionScript 3.0对XML处理的一种扩展,它允许开发者像处理JavaScript对象一样处理XML。通过E4X,你可以直接在XML节点上执行方法,使用点号和方括号操作符访问属性,甚至进行查询。E4X的引入大大简化了XML数据...

    FLEX简介第一章关于FLEX课程的基础简介

    MXML是一种XML标记语言,用于定义Flex应用程序的结构和布局;而ActionScript则是一种面向对象的脚本语言,用于实现业务逻辑。 4. **编译与测试**:使用Flex编译器将源代码编译成SWF文件,并在模拟器或实际设备上进行...

    flex的mxml语言基础

    **Flex的MXML语言基础** Flex是一个用于构建富互联网应用程序(RIA)的框架,而MXML是Flex中用于创建用户界面的主要语言。MXML是一种基于XML的标记语言,它的设计目的是简化界面组件的布局和可视化元素的创建。通过...

Global site tag (gtag.js) - Google Analytics