- 浏览: 49477 次
- 性别:
- 来自: 上海
文章分类
遍历 XML 结构
目录 [隐藏]
访问父节点和子节点
访问属性
按属性或元素值过滤
使用 for..in 和 for each..in 语句
XML 的一个强大功能是它能够通过文本字符的线性字符串提供复杂的嵌套数据。将数据加载到 XML 对象时,ActionScript 会分析数据并将其分层结构加载到内存(如果 XML 数据格式有误,它会发送运行时错误)。
利用 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) // output: 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>
以下表达式都是有效的:
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。
如果试图按照可能不存在的属性或元素过滤,则 Flash® Player 和 Adobe® AIR™ 将引发异常。例如,以下代码的最后一行产生一个错误,因为第二个 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 包含 for..in 语句和 for each..in 语句,用于遍历 XMLList 对象。例如,我们来看 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;
}
目录 [隐藏]
访问父节点和子节点
访问属性
按属性或元素值过滤
使用 for..in 和 for each..in 语句
XML 的一个强大功能是它能够通过文本字符的线性字符串提供复杂的嵌套数据。将数据加载到 XML 对象时,ActionScript 会分析数据并将其分层结构加载到内存(如果 XML 数据格式有误,它会发送运行时错误)。
利用 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) // output: 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>
以下表达式都是有效的:
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。
如果试图按照可能不存在的属性或元素过滤,则 Flash® Player 和 Adobe® AIR™ 将引发异常。例如,以下代码的最后一行产生一个错误,因为第二个 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 包含 for..in 语句和 for each..in 语句,用于遍历 XMLList 对象。例如,我们来看 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;
}
发表评论
-
打开qq聊天面板
2012-07-18 00:40 0btn.addEventListener(MouseEvent ... -
帧播放完毕后 自动关闭 flash 播放器
2012-06-13 14:51 1004fscommand("quit", &qu ... -
as3 打开QQ聊天框
2012-04-10 03:03 919as3 打开QQ聊天框 作者:6dn 日期:2011-10- ... -
AS3动画效果公式,常用处理公式代码,基本运动公式,三角公式
2012-04-01 13:40 0as3种常见的弹性效果公式以及波形运动等as3动画效果公式代码 ... -
随机生成不同的数组
2012-03-29 15:14 833function RandomArray(n:int):Arr ... -
一些AS3中常用到的公式
2012-03-19 14:32 714基本三角函数的计算: 角的正弦值 = 对边 / 斜边 角的 ... -
图片循环滚动
2012-02-20 16:23 845//当第一张图片上移至看不到的位置时,删除该图片,并将该图片排 ... -
Flex代码格式化工具
2011-12-21 13:32 703Flex代码格式化工具 Flexformatter插件 安装与 ... -
字符串排序
2011-12-08 01:38 889var str1:String="很长很长的文本.. ... -
AS3: Dictionary Object
2011-11-24 19:48 1331// Arrays use numeric indexes: ... -
在AS3里..我们无法手动完全删除一个对象,,
2011-11-12 13:36 3346在AS3里..我们无法手动完全删除一个对象,, 以MovieC ... -
视 频
2011-11-09 21:16 663//创建一个 NetConnection 对象 002 var ... -
flashdevelop平台-搭建-配置
2011-11-09 20:43 632http://qilei.org/200810/flashde ... -
ActionScript 3.0基础提高——上篇
2011-11-07 22:52 596我一直非常重视ActionScri ... -
xml 格式
2011-11-07 22:50 634<?xml version="1.0" ... -
加载 xml 清除 空格什么的方法
2011-11-03 11:15 612var str2:String=str.replace(/\s ... -
AS3如何加载自身SWF
2011-11-01 13:26 770AS3如何加载自身SWF 分类: ActionScript3. ... -
加载很多图片
2011-10-24 00:41 574这几天做一个图片加载的程序,出现了点问题,主要是图片的 ... -
a.swf与加载的swf的通讯方法(as3.0)
2011-10-13 23:08 777a.swf加载b.swf, 在b.swf中使用a.swf的方法 ... -
MapDemo 人物移动(二)
2011-10-07 19:52 0上篇提到了人物的创建和人物行走的动画原理,这回我们看看人物的 ...
相关推荐
递归方法会为每个节点创建新的函数调用栈,而当XML结构复杂时,这种开销会显著增加。非递归方法,如使用XML DOM(Document Object Model)或SAX(Simple API for XML)解析器,可以避免这种性能瓶颈。 XML DOM是一...
而QDomDocument适合于需要频繁查找和修改XML结构的场景。 总之,Qt提供的XML处理工具强大且灵活,能够满足不同场景的需求。通过熟练掌握QXmlStreamReader和QDomDocument,开发者可以高效地在Qt应用中处理XML数据,...
在Windows Presentation Foundation (WPF) 中,遍历XML文件是一项常见的任务,特别是在处理用户界面与数据绑定时。本文将深入探讨如何使用WPF来遍历XML文件,查询其中的特定值,并提供一个实用的示例。 首先,让...
`QDomDocument`可以加载XML文件并将其内容以DOM(Document Object Model)树的形式存储,使得我们可以通过节点遍历整个XML结构。在`xmlreadtest.cpp`和`readwritexml.cpp`这两个源文件中,可能就包含了利用...
遍历XML文件是处理XML数据时常见的任务,尤其在解析和操作XML结构时。本篇文章将深入探讨如何利用递归方法遍历XML文件。 一、XML文件结构与解析基础 XML文件由一系列的元素组成,每个元素都有开始标签和结束标签,...
给定以下XML结构文件(files.xml): <FileSystem> < DriverC > ”MSDOS622”> ” Command.com” ></File> </Dir> ”MSDOS.SYS” ></File> ” IO.SYS” ></File> </DriverC> < DriverD > …… </DriverD>...
在jQuery 1.5中,遍历XML节点属性主要通过以下方法实现: 1. **jQuery.parseXML()**:这是jQuery提供的一个静态方法,用于将XML字符串解析为DOM对象。例如: ```javascript var xmlString = "<root><node attr1='...
打开这些文件,我们可以看到具体的实现细节,如如何加载XML文件,如何定义XPath表达式,以及如何使用迭代器遍历XML结构。 在实际编程中,为了提高效率,我们还可以考虑以下几点: - 使用**XmlNodeReader**或**...
在本实例中,我们关注的是“vc cmarkup 遍历 xml 树”,这表明我们将讨论如何在Visual C++(VC6)中使用CMARKUP类来解析并遍历XML树结构。XML(eXtensible Markup Language)是一种用于存储和传输结构化数据的标准...
这篇博客“使用javascript遍历XML文件并显示”探讨了如何利用JavaScript对XML文件进行读取和遍历,并将内容呈现在网页上。 首先,我们需要理解XML的基本概念。XML是一种自描述的、结构化的数据格式,用于存储和传输...
通过它可以加载XML文件、解析XML字符串,或者创建新的XML结构。`XmlNode attrColl` 可能是用来存储XML节点的属性集合,但在这里没有初始化。 10. **遍历XML**: 遍历XML通常涉及到`XmlNode`和其子类的使用,如`...
总的来说,"XercesXML遍历xml"示例是一个学习和理解如何使用Xerces-C++库解析和遍历XML文档的好资源,特别是对于那些希望在C++项目中处理XML数据的开发者而言。通过深入研究这个示例,你可以掌握XML解析的关键概念和...
在实际应用中,可能的需求包括筛选特定节点、修改节点属性、添加或删除节点,甚至转换XML结构。遍历DOM并重新生成XML是实现这些需求的基础步骤。例如,`rights.xml`文件可能包含权限设置,我们可能需要遍历这些设置...
4. 在WinForm应用中,初始化并调用这个递归函数,展示XML结构。 这个过程不仅有助于理解XML文件的结构,还为用户提供了直观的查看方式,尤其在处理复杂XML文档时非常有用。在实际项目中,可能还需要处理XML的属性和...
本话题主要关注如何使用C#递归遍历XML菜单,这是一个常见的需求,例如在构建具有层级结构的网站导航或应用菜单时。以下将详细介绍这一主题。 首先,XML(Extensible Markup Language)是一种用于存储和传输结构化...
### Python 使用 `xml.etree.ElementTree` 遍历 XML 所有节点的详细解析 在本篇文章中,我们将深入探讨如何使用 Python 的内置库 `xml.etree.ElementTree` 来遍历 XML 文件中的所有节点,并提取所需的信息。通过一...
本文将深入探讨如何使用JavaScript来遍历XML文档和处理JSON对象。 首先,让我们了解XML。XML是一种自描述性的标记语言,用于存储和传输结构化数据。在JavaScript中,我们通常使用`DOMParser`或`ActiveXObject`(IE...
接下来,我们可以递归地遍历XML结构,访问每个元素节点及其属性: ```java void traverse(Element element) { // 访问元素的属性 for (Attribute attr : element.attributes()) { System.out.println("属性名: ...
2. **遍历XML节点**:库提供了遍历XML文件所有节点的功能,这是通过递归地访问XML元素的子节点来实现的。例如,可以使用`FirstChildElement()`和`NextSiblingElement()`方法来遍历所有的子元素。 3. **添加、删除和...