`

AS3中遍历xml

    博客分类:
  • Flex
 
阅读更多

AS3中遍历xml  

as3比as2处理xml的功能增强了N倍,获取或遍历节点非常之方便,类似于json对像的处理方式。

XML 的一个强大功能是它能够通过文本字符的线性字符串提供复杂的嵌套数据。将数据加载到 XML 对象时,ActionScript 会分析数据并将其分层结构加载到内存(如果 XML 数据格式有误,它会发送运行时错误)。

利用 XML 和 XMLList 对象的运算符和方法可以轻松遍历 XML 数据的结构。




1、读取外部 XML 文档

可以使用 URLLoader 类从 URL 加载 XML 数据。若要在应用程序中使用以下代码,请将示例中的 XML_URL 值替换为有效的 URL:

var myXML:XML = new XML();
var XML_URL:String = "http://www.87cool.com/sitemap.xml";
var myXMLURL:URLRequest = new URLRequest(XML_URL);
var myLoader:URLLoader = new URLLoader(myXMLURL);
myLoader.addEventListener("complete", xmlLoaded);

function xmlLoaded(event:Event):void
{
    myXML = XML(myLoader.data);
    trace("Data loaded.");
}



2、使用点 (.) 运算符和后代存取器 (..) 运算符

使用点 (.) 运算符和后代存取器 (..) 运算符可以访问 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 属性)。




3、访问父节点和子节点

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


4、访问属性

使用 @ 符号(属性标识符运算符)可以访问 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 是首选方法。




5、按属性或元素值过滤

可以使用括号运算符 — ( 和 ) — 过滤具有特定元素名称或属性值的元素。请考虑下面的 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'));

6、使用 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 中的属性:

分享到:
评论

相关推荐

    利用递归方式遍历XML文件

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

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

    在本篇文章中,我们将深入探讨如何使用 Python 的内置库 `xml.etree.ElementTree` 来遍历 XML 文件中的所有节点,并提取所需的信息。通过一个具体的示例,我们将了解这一过程的实现方式以及需要注意的关键细节。 ##...

    as3加载xml实例

    我们可以通过遍历XML节点来获取这些数据: ```actionscript function xmlLoaded(event:Event):void { var loadedXML:XML = new XML(event.target.data); var text:String = loadedXML.text; var linkText:String...

    遍历文件文件夹并导出到XML

    在IT行业中,遍历文件和目录以及将数据导出到XML是常见的操作,尤其是在处理大量数据和文件系统交互时。这个“遍历文件文件夹并导出到XML”的例子提供了一个简单的实现,可以帮助初学者理解这两个概念。让我们深入...

    as3+xml下拉菜单

    加载完成后,可以遍历XML节点,创建对应的菜单项对象。 3. **创建菜单项**:为每个XML节点创建一个`DisplayObject`(如MovieClip),并添加相应的文本或图标。使用`addChild()`方法将子菜单项添加到父菜单项中。 4...

    Freemarker中遍历list集合实例

    Freemarker是一个强大的模板引擎,常用于Java Web开发中生成动态HTML、XML或其他文本格式的输出。它允许开发者使用简单的语法来控制数据模型,并将其渲染为可读的文本。本实例将详细介绍如何在Freemarker中遍历list...

    as 3.0读取XML

    此函数遍历XML的子节点,并将每个子节点的文本值添加到数组中。这样,我们就可以得到一个包含XML内容的数组。 最后,我们需要一个函数来显示数组中的每行内容。假设我们有一个名为`txtDisplay`的动态文本框,我们...

    as3XML带缩略图照片画廊

    首先,我们需要了解AS3中如何解析XML。AS3提供了一个内置的XML类,可以方便地加载、解析和操作XML文档。通过`new XML()`创建XML对象,然后使用`load()`方法加载XML文件,最后通过`addEventListener(Event.COMPLETE, ...

    as3制作读取XML地址的flash相册源代码

    接下来,我们需要遍历XML节点来获取图片数据。AS3的XML类提供了强大的查询功能,如`descendants()`、`child()`和`@attribute`等方法。下面是如何访问XML中每个图片元素的示例: ```actionscript for each (var ...

    as3反射和将XML转换成对象的类

    在AS3中,XML是一种常见的数据交换格式,XML转换类可以帮助解析XML文档,并根据其结构创建相应的AS3对象。这个过程通常涉及到递归遍历XML节点,为每个节点创建对应的属性或子对象,对于XML属性则映射到对象的属性值...

    AS3苹果滑动菜单XML—附源码

    在AS3苹果滑动菜单中,XML文件通常包含以下结构: ```xml 菜单1" link="page1.html"&gt; 子菜单1.1" link="page1-1.html"/&gt; 子菜单1.2" link="page1-2.html"/&gt; 菜单2" link="page2.html"/&gt; ... ``` 这个XML...

    AS3 XML加载图片、倒计时和各种数据

    接下来,我们需要在AS3中解析这个XML文件。可以使用`load()`方法加载XML文件,然后使用`parseXML()`方法解析它: ```as3 var xmlLoader:URLLoader = new URLLoader(); xmlLoader.dataFormat = URLLoaderDataFormat....

    AS3中新的XML处理方法.pdf

    在ActionScript 3.0(简称AS3)中,引入了一种全新的XML处理机制——E4X(ECMAScript for XML)。这标志着AS3在处理XML数据方面迈出了重要的一步,它不仅简化了开发流程,而且提高了代码的可读性和维护性。 #### E4...

    as3+xml实现的网站菜单

    在AS3中,我们可以利用XML文件作为数据源,动态地构建和更新网站的交互式菜单。这样做的优点在于,非编程背景的人员也能通过编辑XML文件来调整菜单内容,而无需接触代码。 首先,我们需要创建一个XML文件,如`...

    AS2实现读取XML配置文件

    解析XML配置文件通常涉及遍历XML节点,提取所需信息。假设我们的XML配置文件如下: ```xml &lt;!-- 更多设置... --&gt; ``` 我们可以创建一个数组来存储这些配置项: ```actionscript var configArray:Array = ...

    as 实现读取xml文件并分页

    - 使用循环遍历XML数据,根据页码和每页元素数量筛选出要显示的部分。 ```actionscript var pageSize:int = 10; // 每页显示10个元素 var currentPage:int = 1; // 当前页码 var startIndex:int = (currentPage - ...

    as+xml导航

    2. **解析XML**:AS2.0脚本使用`XML()`函数加载XML文件,然后通过遍历XML树来获取数据。 3. **创建UI元素**:根据解析出的XML数据,AS2.0创建相应的舞台对象,如MovieClip或Button,设置它们的文本、位置、事件监听...

    Sqlserver 采用xml入参获取检查报告存储过程和函数

    接下来,为了能够有效地从 XML 格式的参数中提取出具体的信息,我们需要编写一个用于解析 XML 节点值的函数。这个函数可以帮助我们在存储过程中更方便地处理 XML 输入。 以下是一个示例函数: ```sql CREATE ...

    As3.0通过XML加载图片3d效果

    3. 解析XML中的图片信息:遍历XML节点,获取图片URL和3D位置信息。 ```actionscript for each (var imageNode:XML in xmlData.children()) { var imageUrl:String = imageNode.@src; var x:Number = Number(image...

Global site tag (gtag.js) - Google Analytics