as3—访问xml文档
来源:互联网 发布:采集器软件 编辑:程序博客网 时间:2024/04/28 07:21
利用 XML 和 XMLList 对象的运算符和方法可以轻松遍历 XML 数据的结构。
使用点 (.) 运算符和后代存取器 (..) 运算符可以访问 XML 对象的子属性。请考虑下面的 XML 对象:
var myXML
:XML = <order> <book ISBN="0942407296"> <title>Baking Extravagant Pastries with Kumquats</title> <author> <lastName>Contino</lastName> <firstName>Chuck</firstName> </author> <pageCount>238</pageCount> </book> <book ISBN="0865436401"> <title>Emu Care and Breeding</title> <editor> <lastName>Case</lastName> <firstName>Justin</firstName> </editor> <pageCount>115</pageCount> </book> </order>
对象 myXML.book
是一个 XMLList 对象,它包含名为 book
的 myXML
对象的子属性。它们是两个 XML 对象,与 myXML
对象的两个 book
属性匹配。
对象 myXML..lastName
是一个 XMLList 对象,它包含名为 lastName
的任何后代属性。它们是两个 XML 对象,与 myXML
对象的两个 lastName
匹配。
myXML.book.editor.lastName
对象是一个 XMLList 对象,它包含 myXML
对象的名为 book
的子对象的名为 editor
的子对象的名为 lastName
的任何子对象:在本例中,XMLList 对象只包含一个 XML 对象(值为"Case
"的 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")); // 6401trace(employee.attribute("*").toXMLString()); // 6401// 233trace(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>
以下表达式都是有效的:
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));
使用 for..in 和 for each..in 语句
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];}
- as3—访问xml文档
- AS3读取XML文档
- as3之访问XML元素和属性
- vb6中访问XML文档
- 应用名称访问XML文档
- PHP通过SimpleXML访问xml文档
- [转]PHP通过SimpleXML访问xml文档
- IE与Firefox中访问XML文档
- java通过DOM接口访问XML文档
- AS3访问AMFPHP
- as3之XML对象
- as3操作xml
- AS3 操作XML
- [AS3]操作XML
- AS3 XML 转JSON
- flash as3读取xml
- AS3处理XML
- AS3 操作XML详解
- 每天学一点flash(38) 制作走马灯二
- DOM and MSXML
- Unix操作系统的入门与基础
- C语言的底层操作
- Unix的轻巧“约取而实得”(上篇)
- as3—访问xml文档
- Unix的轻巧“约取而实得”(中篇)
- 一个java程序员的成长历程
- Unix的轻巧“约取而实得”(下篇)
- ie ff中设置flash背景透明
- SIP 探析
- 经典语录
- C++经典面试题
- NET Framework Library Source Code now available