AS3操作xml

来源:互联网 发布:单片机可以做什么 编辑:程序博客网 时间:2024/06/13 10:05
定义一个XML对象:

internal var newXML:XML =
<tutorial>
<item id='1'>
<level>2</level>
<title> First touch of Flash 9</title>
</item>
<item id='2'>
<level>3</level>
<title> Binding Classes</title>
</item>
<item id='3'>
<level>4</level>
<title>Document Class</title>
</item>
</tutorial>;

访问XML对象的节点,@开头说明是属性

trace(newXML.item[1].level, newXML.item[2].@id, newXML.item[2].title);

输出:3 3 Document Class

//显示level为4的节点的title值

trace (newXML.item.(level == 4).title);

//output:Document Class

//显示level>2的节点的title值,本处结果大于1,所以是一个XML Array。

trace (newXML.item.(level > 2).title);

/*output:

<title>Binding Classes</title>

<title>Document Class</title>

*/

//使用属性用@开头即可。

trace (newXML.item.(level > 2).@id);

//output:23

//这儿要注意,实际上是2,3。一个Array.

//也可以用属性来做判断

trace (newXML.item.(@id > 1).title);



添加或者修改属性,直接写即可。

//把id == 1的节点level值改为2

newXML.item.(@id==1).level = 2;

//把id==1的节点添加一个属性 page

newXML.item.(@id==1).page = 100;

trace (newXML.item.(@id==1));

按某条件插入节点

var newNode1:XML = <item id='2.5'><level>0</level><title>None</title></item>

var newNode2:XML = <item id='1.5'><level>0</level><title>None</title></item>

//把newNode1插入到id==2的节点后面

newXML = newXML.insertChildAfter(newXML.item.(@id==2), newNode1);

//把newNode1插入到id==2的节点前面

newXML = newXML.insertChildBefore(newXML.item.(@id==2), newNode2);

trace (newXML);



XML.ignoreWhitespace = false;
XML.ignoreComments = false;
XML类的ignoreWhitespace和ignoreComments属性都是true,像上面那样设置,只对设置之后的新产生的XML对象有效,也就是说在上面2个设置之前new出来的XML对象这2个属性仍是true。而且ignoreComments为true的时候,XML对象连注释都不会读取,也就是说,如果是个xml文件,此XML对象从文件中读取的内容不包含注释。
访问XML的注释,首先ignoreComments要是false
trace(newestXML.comments().length());
trace(newestXML.comments()[1].toXMLString());
这里的comments()是指根标签内,在其他标签对之外的注释,要像访问内部元素,要这样写:
trace(newestXML.item[0].comments()[0].toXMLString());
更深层的注释,就依次类推。

XML的克隆
var newestXML:XML = newXML.copy();

descendants函数:返回一个XMLList对象,包括所有的子节点。设ignoreComments = false;和ignoreProcessingInstructions = false(是否处理XML操作指令)后,连comments和process instructions也会包含在这个XMLList对象中。
参考文档里是这样说明:

返回包含给定

name

参数的 XML 对象的所有后代(子级、孙级、曾孙级等)。

name

参数是可选项。

name

参数可以为 QName 对象、String 数据类型或随后转换为 String 数据类型的任何其它数据类型。

若要返回所有后代,请使用“*”参数。如果未传递任何参数,则传递字符串“*”,并返回此 XML 对象的所有后代。

示例:

XML.ignoreComments = false;
var xml:XML =
<body>
<!-- comment -->
text1
<a>
<b>text2</b>
</a>
</body>;
trace(xml.descendants("*").length()); // 5
trace(xml.descendants("*")[0]); // // <!-- comment -->
trace(xml.descendants("*")[1].toXMLString()); // text1
trace(xml.descendants("a").toXMLString()); // <a><b>text2</b></a>
trace(xml.descendants("b").toXMLString()); // <b>text2</b>



XML节点删除,删除的方法目前常用的有两种:
1、复制所有节点除了想要删除的。
2、delete点想要删除的节点。

使用

prependChild()

方法或

appendChild()

方法可在 XML 对象属性列表的开头或结尾添加属性

var x1:XML = <p>Line 1</p> var x2:XML = <p>Line 2</p> var x:XML = <body></body>x = x.appendChild(x1);x = x.appendChild(x2);x = x.prependChild(<p>Line 0</p>); // x == <body><p>Line 0</p><p>Line 1</p><p>Line 2</p></body>

使用

insertChildBefore()

方法或

insertChildAfter()

方法在指定属性之前或之后添加属性

var xx:XML =

<body>

<p>Paragraph 1</p>

<p>Paragraph 2</p>

</body>;

var newNode:XML=<p>Paragraph 1.5</p>;

xx = xx.insertChildAfter(xx.p[0],newNode);

xx = xx.insertChildBefore(xx.p[2], <p>Paragraph 1.75</p>);

trace(xx);

还可以使用大括号运算符(

{



}

)在构造 XML 对象时按引用(从其它变量)传递数据

var ids:Array = [121, 122, 123];

var names:Array = [["Murphy","Pat"], ["Thibaut","Jean"], ["Smith","Vijay"]]

var x:XML = new XML("<employeeList></employeeList>");

for (var i:int = 0; i < 3; i++){

var newnode:XML = new XML();

newnode = <employee id={ids[i]}> <last>{names[i][0]}</last> <first>{names[i][1]}</first> </employee>;

x = x.appendChild(newnode)

}

原创粉丝点击