一、XML类和XMLList类的区别

      AS3.0中,处理XML主要用到两个主类,XML类和XMLList类,这两个类的很多内容是共通的。应该有人会问,XML和XMLList的区别是什么?

      XML:表示单个的 XML元素。也就是说,该XML元素中,只有一个最顶级的标签,但可以包含其他子标签。

      XMLList:表示一组的XML元素。也就是说,该XML元素中,存在多个同级别的顶级标签。当然每个标签也可以包含其他子标签。

      呃,这个定义是我自己下的,能理解不?我举例说明吧。

      示例1:XML元素,只包含一个标签,同时也是顶级标签

      <Cardcolor>黑桃</Cardcolor>

示例2:XML元素,包含多个标签,但只有1个顶级标签

<root>

<Cardcolor>黑桃</Cardcolor>

<Cardname>决斗</Cardname>

</root>

示例3:XMLList元素,拥有2个同级的顶级标签

<Cardcolor>黑桃</Cardcolor>

<Cardname>决斗</Cardname>

有些时候,某些类的方法返回的是XMLList对象,但该XMLList对象只包含一个XML元素,如上篇中最后一例中的myXML.root.(@id == 2).Cardname。那么此时,该XMLList对象将被视为XML对象。

二、XML的四则运算

四则运算,这个词熟吧,好怀念的读书时代。好吧,跑题了!

可以对XML进行一些常规运算,这些运算方式由于形式简单,因此非常实用。

(1) = 号运算

var myXML:XML =

<card>

<Cardcolor>黑桃</Cardcolor>

</card>

我们先加入语句:

myXML.Cardcolor = "梅花";

trace(myXML.toXMLString());

返回:

<card>

<Cardcolor>梅花</Cardcolor>

</card>

我们接着加入语句:

myXML.Cardname = "决斗"

myXML.@id = 1;

trace(myXML.toXMLString());

返回:

<card id="1">

<Cardcolor>梅花</Cardcolor>

<Cardname>决斗</Cardname>

</card>

(2) + 法运算

var x1:XML = <a>test1</a>

var x2:XML = <b>test2</b>

var xList:XMLList = x1 + x2;

trace(xList.toXMLString());

返回:

<a>test1</a>

<b>test2</b>

注意:xList的数据类型为XMLList,如果是XML会报错哦!

我们也可以看到,appendChild()方法其实没什么用。

(3) 括号运算

有关括号运算的方式,其实上一篇中我有提及,但我没有具体的说明,只是介绍了这么个用法。事实上,在XML中,可以使用括号运算来对XML对象进行过滤。

示例:

var myXML:XML =

<card>

<root id = '1' type = 'a'>

<Cardcolor>黑桃</Cardcolor>

<Cardname>决斗</Cardname>

</root>

<root id = '2' type = 'b'>

<Cardcolor>黑桃</Cardcolor>

<Cardname>雌雄双股剑</Cardname>

</root>

</card>

请参看和比较以下表达式:

A、myXML.root.(Cardcolor == "黑桃").Cardname

由于符合该条件的对象有2个,所以返回结果是一个XMLList对象:

<Cardname>决斗</Cardname>

<Cardname>雌雄双股剑</Cardname>

B、myXML.root.(@id == 1).Cardname

由于符合该条件的对象只有1个,虽然是XMLList对象,但视为XML,所以返回:

决斗

C、过滤条件不仅限于等于,例如,下面的表达是也是合法的:

myXML.root.(@id &gt;= 1).Cardname

当使用以上括号运算时,需要特别注意,XML对象的结构需要保持一致。不然如果引用到不一致的部分作为判断,会产生报错!

三、XML类、XMLList类常用方法

其实,这两个类真的很接近,汗!下面的讲解中,我需要用到下面这个XML示例:

示例:

var myXML:XML =

<card>

<root id = '1' type = 'a'>

<Cardcolor>黑桃</Cardcolor>

<Cardname>决斗</Cardname>

</root>

<root type = 'b'>

<Cardcolor>黑桃</Cardcolor>

<Cardname>雌雄双股剑</Cardname>

</root>

</card>

(1) toString() 和 toXMLString()

若XML元素包含复杂元素,两者功能相同。

若XML元素只包含简单内容,两者有区别。toString()只包含内容,toXMLString()包含标签。

如示例中,

trace(myXML.root[0].toString())

trace(myXML.root[0].toXMLString())

两者返回内容相同。

trace(myXML.root[0].Cardcolor.toString()) //返回:黑桃

trace(myXML.root[0].Cardcolor.toXMLString()) //返回:<Cardcolor>黑桃</Cardcolor>

两者返回内容不同。

(2) attribute()、attributes()

在示例中:

myXML.root[0].@id

myXML.root[0].attribute("id")

这两个是等值的

trace(myXML.root[0].@*)

trace(myXML.root[0].attributes())

这两个也是等值的

所以,一般情况下,尽量使用@符号来访问属性比较好。

只有以下这种情况例外。大家注意看,示例中,第一个<root>标签有id属性,而第二个没有,然后我们使用上面讲的括号来过滤时:

第一种方法:

trace(myXML.root.(@id &gt;= 1).Cardname);

结果:报错!因为XML结构不完全一致。

第二种方法:

trace(myXML.root.(attribute("id") &gt;= 1).Cardname);

结果:没有报错!说明用该方法可以去除不一致的XML结构。

(3) child()、children()、elements()

在示例中:

trace(myXML.root[0]);

trace(myXML.child("root")[0]);

这两者是等值的。

但一般,使用child的用处,还是为了循环遍历。用下面的语句,可以获得子项的数目。

myXML.child("root").length();

但比较尴尬的是,如果只是为了这个目的,也可以用下面的语句等值实现:

myXML.children().length();

但上面的两个方法,返回的数量都是所有元素的数量,比如下面的例子:

var xml:XML =

<a>

<b></b>

<c></c>

text

</a>;

trace(xml.children().length()); //返回:3

如果只要返回具有标签的元素,那么需要用到elements()方法。

trace(xml.elements().length()); //返回:2

对三者功能做个总结:

child():返回指定的某个子元素

children():返回子元素的列表

elements():返回具有标签的子元素的列表

(4) 删除XML节点

E4X规范中,定义有delete和deleteByIndex方法,用来删除特定的XML节点。但是在AS3.0中,并没有这两个方法。甚至在帮助文档中,也没有提及如何删除一个XML节点。真不负责任啊!!!

不过,其实是可以实现的,用delete方法。

如示例,我们要删除第二个<root>节点,可以用以下语句:

delete myXML.root[1];

用setChildren()方法,可以重写XML节点,但是会把当前的XML节点全部清除。例如:

myXML.setChildren(<a>test</a>);

trace(myXML.toXMLString());

返回:

<card>

<a>test</a>

</card>

但是setChildren()方法是必须带参数的,不然倒也是一个删除节点的方法。

还有一个replace()方法,也是用于替换的,并且可以指定要替换的内容,我这里不做介绍了,有兴趣的朋友可以参考帮助。

http://blog.csdn.net/z9061/article/details/8022005

as3 XML类和XMLList类的区别的更多相关文章

  1. 2017.12.20 Java中的 IO/XML学习总结 File类详细

    IO / XML 一.File类 1.定义/概念 Java是面向对象的语言,要想把数据存到文件中,就必须要有一个对象表示这个文件.File类的作用就是代表一个特定的文件或目录,并提供了若干方法对这些文 ...

  2. C++ 类对象和 指针的区别

    C++ 类对象和 指针的区别 C++ 类对象和 指针的区别 转自:http://blog.csdn.net/ym19860303/article/details/8557746 指针的情况 class ...

  3. C#读取XML文件的基类实现

    刚到新单位,学习他们的源代码,代码里读写系统配置文件的XML代码比较老套,直接写在一个系统配置类里,没有进行类的拆分,造成类很庞大,同时,操作XML的读写操作都是使用SetAttribute和node ...

  4. XML转换为对象操作类详解

    //XML转换为对象操作类 //一,XML与Object转换类 using System.IO; using System.Runtime.Serialization.Formatters.Binar ...

  5. XML文件与实体类的互相转换

    XML文件与实体类的互相转换 一.将XML文件反序列化为实体类对象 1. 通常程序的配置信息都保存在程序或者网站的专门的配置文件中(App.config/web.config).但是现在为了演示XML ...

  6. CSS 属性 :before && :after的用法,伪类和伪元素的区别

    一::before && :after的用法 :before 如同对伪元素的名称一样,:before 是用来给指定的元素的内容前面插入新的内容.举例说明: .before:before ...

  7. C#中 StringBuilder类 与 String类的区别---(转)

      在找工作的时候,去了些公司,避免不了要面试和笔试.不过一般最起初的是笔试.我印象中有这样有一道题目:StringBuilder类与 String类的区别?那时候我不太清楚这两个类的区别,今天在看代 ...

  8. Python新式类和旧式类的区别

    新式类是为了统一**而在2.2中开始引入的. 代码讲解 上面的例子比较明白的说明了问题. B是定义的新式类.那么输入b的时候,不论是type(b),还是b.__class__都是输出的<clas ...

  9. debug类和trace类的区别

    在 .net 类库中有一个 system.diagnostics 命名空间,该命名空间提供了一些与系统进程.事件日志.和性能计数器进行交互的类库.当中包括了两个对开发人员而言十分有用的类——debug ...

随机推荐

  1. 来自官方的一些dbt 最佳实践

    限制对原始数据的依赖性 您的项目将取决于存储在数据库中的原始数据.我们建议制作所谓的“基本模型”,以最大限度地减少对原始数据表的依赖性.在此约定中,基本模型可以具有以下职责: 仅选择与当前分析相关的字 ...

  2. Jenkins进阶-获取git tags代码(2)

    配置Jenkins获取git tag代码的方式其实方法很多,目前我使用比较多的主要是通过Git Parameter 来配置动态的获取最新tags代码,主要我们首先需要安装一下Git Parameter ...

  3. ZedGraph控件的使用

    http://blog.chinaunix.net/uid-20776117-id-1847015.html 在我们编写程序的时候,有时候是要做一些统计的,为了达到一目了然的效果,饼状图,曲线图,柱状 ...

  4. Microsoft Dynamics CRM4.0 和 Microsoft Dynamics CRM 2011 JScript 方法对比

    CRM 2011 如果需要再IE里面调试,可以按F12在前面加上contentIFrame,比如 contentIFrame.document.getElementById("字段" ...

  5. Spring3 MVC请求参数获取的几种方法[转载]

    http://www.cnblogs.com/leiOOlei/p/3658147.html 一.      通过@PathVariabl获取路径中的参数 @RequestMapping(value= ...

  6. Linux下解压缩命令

    1. tar格式 解包:[*******]$ tar xvf FileName.tar 打包[---]:[*******]$ tar cvf FileName.tar DirName(注:tar是打包 ...

  7. SpringCloud统一配置笔记

    Server端: pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns= ...

  8. yum安装软件时报错:Loaded plugins:fastestnirror,security Existing lock /var/run/yum.pid

    在linux中使用yum时出现如下错误: Loaded plugins: fastestmirror, security Existing lock /var/run/yum.pid: another ...

  9. 1036 Boys vs Girls (25 分)

    1036 Boys vs Girls (25 分) This time you are asked to tell the difference between the lowest grade of ...

  10. centos 7.5 安装mongodb

    MongoDB安装和启动 从官网下载最新对应的版本然后解压,本文以3.6.9为例,将文件拷贝到opt目录下,然后解压: [root@localhost opt]# tar zxvf mongodb-l ...