`

遍历 XML 结构

xml 
阅读更多
遍历 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;
}
分享到:
评论

相关推荐

    遍历XML文件内所有节点和属性

    递归方法会为每个节点创建新的函数调用栈,而当XML结构复杂时,这种开销会显著增加。非递归方法,如使用XML DOM(Document Object Model)或SAX(Simple API for XML)解析器,可以避免这种性能瓶颈。 XML DOM是一...

    Qt实现xml文件内容的遍历读出

    `QDomDocument`可以加载XML文件并将其内容以DOM(Document Object Model)树的形式存储,使得我们可以通过节点遍历整个XML结构。在`xmlreadtest.cpp`和`readwritexml.cpp`这两个源文件中,可能就包含了利用...

    qt xml操作 遍历

    而QDomDocument适合于需要频繁查找和修改XML结构的场景。 总之,Qt提供的XML处理工具强大且灵活,能够满足不同场景的需求。通过熟练掌握QXmlStreamReader和QDomDocument,开发者可以高效地在Qt应用中处理XML数据,...

    wpf遍历xml文件

    在Windows Presentation Foundation (WPF) 中,遍历XML文件是一项常见的任务,特别是在处理用户界面与数据绑定时。本文将深入探讨如何使用WPF来遍历XML文件,查询其中的特定值,并提供一个实用的示例。 首先,让...

    利用递归方式遍历XML文件

    遍历XML文件是处理XML数据时常见的任务,尤其在解析和操作XML结构时。本篇文章将深入探讨如何利用递归方法遍历XML文件。 一、XML文件结构与解析基础 XML文件由一系列的元素组成,每个元素都有开始标签和结束标签,...

    c# 遍历xml文件

    给定以下XML结构文件(files.xml): &lt;FileSystem&gt; &lt; DriverC &gt; ”MSDOS622”&gt; ” Command.com” &gt;&lt;/File&gt; &lt;/Dir&gt; ”MSDOS.SYS” &gt;&lt;/File&gt; ” IO.SYS” &gt;&lt;/File&gt; &lt;/DriverC&gt; &lt; DriverD &gt; …… &lt;/DriverD&gt;...

    jQuery 1.5 遍历xml节点属性

    在jQuery 1.5中,遍历XML节点属性主要通过以下方法实现: 1. **jQuery.parseXML()**:这是jQuery提供的一个静态方法,用于将XML字符串解析为DOM对象。例如: ```javascript var xmlString = "&lt;root&gt;&lt;node attr1='...

    用C#快速读取XML文件,并遍历

    打开这些文件,我们可以看到具体的实现细节,如如何加载XML文件,如何定义XPath表达式,以及如何使用迭代器遍历XML结构。 在实际编程中,为了提高效率,我们还可以考虑以下几点: - 使用**XmlNodeReader**或**...

    vc cmarkup 遍历 xml 树

    在本实例中,我们关注的是“vc cmarkup 遍历 xml 树”,这表明我们将讨论如何在Visual C++(VC6)中使用CMARKUP类来解析并遍历XML树结构。XML(eXtensible Markup Language)是一种用于存储和传输结构化数据的标准...

    使用javascript遍历XML文件并显示

    这篇博客“使用javascript遍历XML文件并显示”探讨了如何利用JavaScript对XML文件进行读取和遍历,并将内容呈现在网页上。 首先,我们需要理解XML的基本概念。XML是一种自描述的、结构化的数据格式,用于存储和传输...

    用C#遍历XML.docx

    通过它可以加载XML文件、解析XML字符串,或者创建新的XML结构。`XmlNode attrColl` 可能是用来存储XML节点的属性集合,但在这里没有初始化。 10. **遍历XML**: 遍历XML通常涉及到`XmlNode`和其子类的使用,如`...

    xercesXML遍历xml

    总的来说,"XercesXML遍历xml"示例是一个学习和理解如何使用Xerces-C++库解析和遍历XML文档的好资源,特别是对于那些希望在C++项目中处理XML数据的开发者而言。通过深入研究这个示例,你可以掌握XML解析的关键概念和...

    dom遍历所有xml节点,并且重新生成xml

    在实际应用中,可能的需求包括筛选特定节点、修改节点属性、添加或删除节点,甚至转换XML结构。遍历DOM并重新生成XML是实现这些需求的基础步骤。例如,`rights.xml`文件可能包含权限设置,我们可能需要遍历这些设置...

    遍历XML并加载到树

    4. 在WinForm应用中,初始化并调用这个递归函数,展示XML结构。 这个过程不仅有助于理解XML文件的结构,还为用户提供了直观的查看方式,尤其在处理复杂XML文档时非常有用。在实际项目中,可能还需要处理XML的属性和...

    c#递归遍历xml菜单

    本话题主要关注如何使用C#递归遍历XML菜单,这是一个常见的需求,例如在构建具有层级结构的网站导航或应用菜单时。以下将详细介绍这一主题。 首先,XML(Extensible Markup Language)是一种用于存储和传输结构化...

    python xml.etree.ElementTree遍历xml所有节点实例详解

    ### Python 使用 `xml.etree.ElementTree` 遍历 XML 所有节点的详细解析 在本篇文章中,我们将深入探讨如何使用 Python 的内置库 `xml.etree.ElementTree` 来遍历 XML 文件中的所有节点,并提取所需的信息。通过一...

    js遍历xml,json学习

    本文将深入探讨如何使用JavaScript来遍历XML文档和处理JSON对象。 首先,让我们了解XML。XML是一种自描述性的标记语言,用于存储和传输结构化数据。在JavaScript中,我们通常使用`DOMParser`或`ActiveXObject`(IE...

    dom4j 解析(读取) xml 节点数据

    接下来,我们可以递归地遍历XML结构,访问每个元素节点及其属性: ```java void traverse(Element element) { // 访问元素的属性 for (Attribute attr : element.attributes()) { System.out.println("属性名: ...

    遍历xml文件的动态链接库和调用库的例程(附库源码)

    2. **遍历XML节点**:库提供了遍历XML文件所有节点的功能,这是通过递归地访问XML元素的子节点来实现的。例如,可以使用`FirstChildElement()`和`NextSiblingElement()`方法来遍历所有的子元素。 3. **添加、删除和...

Global site tag (gtag.js) - Google Analytics