发新话题
打印

[编程] 使用xmlCreator来创建xml文档

使用xmlCreator来创建xml文档

一般接触flash传参比较多的方法是用loadVars类 ,这个方法传输简单 但是不规范 对于后台接受比较苦恼 易读性差
所以编了一个xmlCreator类来实现此功能

类中没有用到appendChild/createElement/createTextNode等方法,因为当时试验的时候没有得到能用于cdata传值的方法,后来经此xml写成的cdata方法输出后也转化成了nodeValue的形式,也就是<!cdata[[]]>形式消失了,而且里面的字符都会经过特殊处理转义,没有cdata的作用.....
xmlCreator 类代码
复制内容到剪贴板
代码:
class com_zszen.xml.xmlCreator {
private var xml:XML;
private var nodeAry:Array;
private var str:String;
function xmlCreator() {
  nodeAry = new Array();
  nodeAry[0] = {name:"", value:"<?xml version='1.0' encoding='gb2312' ?>", level:0};
}
function add(value:String, nodeElement:Object, level:Number, cdata:String) {
  var node:String = "<"+value;
  for (var name in nodeElement) {
   node += " "+name+"='"+nodeElement[name]+"'";
  }
  //nodeAry[father].level += 1;
  nodeAry.push({name:"</"+value+">", value:node+">", level:level});
  if (cdata != null) {
   nodeAry.push({name:"", value:"<![CDATA["+cdata+"]]>", level:level+1});
  }
}
private function rebuild() {
  str = recursion(nodeAry);
}
private function recursion(ary, level) {
  if (ary.length<1) {
   return "";
  }
  var str = "";
  var max = 10000;
  if (level == null) {
   level = 0;
  }
  for (var i = level; i<ary.length; i++) {
   if (ary[i].level>=max) {
    max = ary[i].level;
   } else {
    max = -1;
    if (ary[i].level<ary[i+1].level) {
     str += ary[i].value+recursion(ary, i+1)+ary[i].name;
    } else if (ary[i].level == ary[i+1].level) {
     str += ary[i].value+ary[i].name+recursion(ary, i+1);
    } else if (ary[i].level>ary[i+1].level) {
     str += ary[i].value+ary[i].name;
     return str;
    } else {
     str += ary[i].value+recursion(ary, i+1)+ary[i].name;
    }
   }
  }
  return str;
}
function get value() {
  rebuild();
  return xml=new XML(str);
}
function toString() {
  rebuild();
  return (new XML(str)).toString();
}
}
使用方法add(节点名,节点内的变量,节点层级,节点的子内容[就是cdata内容])
复制内容到剪贴板
代码:
import com_zszen.xml.xmlCreator;
var xml = new xmlCreator();
xml.add("a", {name:123}, 0);
xml.add("b", {name:123}, 1);
xml.add("c", {name:123}, 2, "asdfasdf");
trace(xml)
生成结果
复制内容到剪贴板
代码:
<?xml version='1.0' encoding='gb2312' ?><a name="123"><b name="123"><c name="123">asdfasdf</c></b></a>
使用说明
复制内容到剪贴板
代码:
请放入fla同目录的com_zszen/xml文件夹,没有请自行建立

附件

xmlCreator.as (1.74 KB)

2007-7-12 18:16, 下载次数: 87

54371309[请发送:flash8会员问题]
正在更新中..070815   http://zszen.com

TOP

先支持一下~

今天脑子不好使,吃点鱼去~
寻觅终生伴侣!

my blog

TOP

看了下,觉得这样有些不妥....

<0>
<1></1>
<1></1>
</0>
<0>
<1></1>
<1></1>
</0>

类似这样的,所谓的level应该是个相对的值才对.
寻觅终生伴侣!

my blog

TOP

当然不能是相对的
譬如:
0
1
  2
1
  2
  2
   3
  2
  2
   3
    4
1
0
如何实现?
54371309[请发送:flash8会员问题]
正在更新中..070815   http://zszen.com

TOP

他的级别有平级和父子两种  从子的角度来看 又分为父子,平级,其他父子关系
54371309[请发送:flash8会员问题]
正在更新中..070815   http://zszen.com

TOP

不错,下着用了。
我的小站:
http://www.D-eden.eb.cn

TOP

有個問題!

寫這樣可以正常!
复制内容到剪贴板
代码:
xml = new xmlCreator();
xml.add("CreateXML", "", 0);
xml.add("XML", {id:1}, 1);
xml.add("XML", {name:"kamon"}, 1);
xml.add("XML", {name:"bbq"}, 1);
trace(xml);
結果:
复制内容到剪贴板
代码:
<?xml version='1.0' encoding='gb2312' ?>
<CreateXML>
<XML id="1" />
<XML name="kamon" />
<XML name="bbq" />
</CreateXML>
寫成這樣輸出結果不正常了
复制内容到剪贴板
代码:
xml = new xmlCreator();
xml.add("CreateXML", "", 0);
xml.add("XML", {id:1}, 1, "OK!");
xml.add("XML", {name:"kamon"}, 1);
xml.add("XML", {name:"bbq"}, 1);
trace(xml);
結果:
复制内容到剪贴板
代码:
<?xml version='1.0' encoding='gb2312' ?>
<CreateXML>
<XML id="1">OK!</XML>
<XML name="kamon" />
<XML name="bbq" />
</CreateXML>
<XML name="kamon" />
<XML name="bbq" />
<XML name="kamon" />
<XML name="bbq" />
[ 本帖最后由 kamon 于 2007-7-13 10:23 编辑 ]

TOP

Flash8 AS2 开发环境下能用吗?
不知什么时候,开始和你在梦里头接触……

TOP

收了

TOP

发新话题