• 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;

  • 相关阅读:
    居敬持志
    测试内容
    TestMarkDown
    git
    面试题
    兼容的可视区高度和宽度
    JS(数据类型、预解析、闭包、作用域、this)
    JavaScript new 一个构造函数
    Windows下gm打水印老是报gm convert: Unable to read font (n019003l.pfb)问题
    如何开始一个vue+webpack项目
  • 原文地址:https://www.cnblogs.com/sode/p/2817401.html
Copyright © 2020-2023  润新知