as3 操作xml

引用:http://songwensheng.iteye.com/blog/644360

示例如下:Tree.mxml:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"  creationComplete="menu.send();"  layout="absolute">
 <mx:Script>
  <![CDATA[
  import mx.collections.ArrayCollection;
import mx.rpc.events.ResultEvent;
import mx.controls.Alert;
   [Bindable]
private var myData:ArrayCollection;
private var menus2:XML;
private var results:XMLList;
private function resultHandler(event:ResultEvent):void {
  menus2 = XML(event.result);
  //proto子节点(即Field节点)xml对象的集合
  var list:XMLList = menus2.packet.proto.children();
  //删除hide的节点
  for(var i:int=0;i<list.length();i++) {
   if(list.@hide=="yes") {
    delete list[i];//删除field中属性hide的field节点
    Alert.show("del");
   }
//   if(menus2.packet.proto.field.@hide=="yes") {//原始操作方法
//    delete menus2.packet.proto.field[i];//删除节点
//   }
     //位于列表下第三个对象是否有showname属性
 var li:XMLList = list[i].attribute("showname");
    if(li.length()==0) {//没有showname属性
    //添加一个showname属性值是show的值
    list[i].@showname=list[i].@show;
     }
  }
  //增加属性
  //menus2.packet.proto.field[0].@hello="helloword";
 
  var results:XMLList = menus2.packet.proto;
  Alert.show(results);
  //将集合绑定到tree上
  treeMenu.dataProvider = results;
}
private function modify():void {
 delete menus2.packet.proto.field;
 Alert.show(menus2.packet.proto.toString());
}
  ]]>
 </mx:Script>
<mx:HTTPService id="menu" url="erb2.xml" result="resultHandler(event)" resultFormat="xml" />
<mx:Tree id="treeMenu" labelField="@showname" width="50%" height="100%">
</mx:Tree>
<mx:Button label="修改" click="modify()" x="427" y="53"/>
</mx:Application>

xml文件内容为:erb2.xml:

<?xml version="1.0"?>
<pdml version="0" creator="wireshark/1.0.8">
<packet>
  <proto name="geninfo" pos="0" showname="General information" >
    <field name="num" pos="0" hide="yes" show="1" showname="Number" value="1"/>
    <field name="len" pos="0" show="115" showname="Packet Length"/>
    <field name="len" pos="0" show="noshowname"/>
  </proto>
</packet>
</pdml>

首先是修改:

修改XML节点其实比较简单,创建XML对象后,直接调用如下的方法:

A.insertChildBefore(a,b);//在a节点前插入b节点

A.insertChildAfter(a,b);//在a节点之后插入b

A.appendChild(a);//附加a文本子节点

A.prependChild(a);//把a加到前面

A.a.@b="c"//为a节点添加一个名为b的属性,其值为c

示例:(中间没有中断)

////////////////////////////////////////////////////////////////////////////////////

//创建XML

var A:XML=<a />;

//加入一个节点b

A.b=<b />;

//加入一个节点c,且值为11,如果存入数组,值为逗号隔开的文本,其中null,undefined将解析为空""

A.c="11";

//输出为:<a><b /><c>11</c></a>

trace(A);

//在c节点前插入一个<d />节点,insertChildAfter()等方法同理

A = A.insertChildBefore(A.c,<d />);

//输出内容:(略)

trace(A);

//添加属性

A.c.@e="true";

A.d.@f=15;

//输出内容:。。。

trace(A);

////////////////////////////////////////////////////////////////////////////////////

读取XML节点:

A.elements();//返回A节点下的所有元素

A.a;//返回A节点下的a节点的内容,如果有多个a节点,则使用a[n]来指定(n从0开始),返回后使用toString(),int(),Number()方法转换。

A.@a;//返回A节点的a属性的值,老方法attribute(a)还可以用~不过注意里面的a为属性名称~不过:

A.@*[n];//爆发吧~attribute用不着了~通配符*和@代替了。。。郁闷。。。

以上内容就不用示例了吧~~使用方法和写入方式类似~~~

 

删除:

使用关键字delete,后加个节点或属性或。。。的,就和读节点的方式一样就可以了。。。

例如:

//删除了A节点的a节点。。。

delete A.a;

//删除了A节点的b属性

delete A.@b;

posted @ 2012-12-14 02:18  镇水古月  阅读(240)  评论(0编辑  收藏  举报