写了个和as3的xml差不多的类,又跟hashmap有点像,可实现多维数组
space类 将路径更改就可以直接使用
此
类的使用方法是 可以将数组 对象 字符串
数字 和 xml链表 等数据 存放到其中 便于查找
首先声明 此脚本可能存在未知bug , depth深度可能返回有错误
声明对象
var s:space=new space()
添加参数
s[name]=value
或是
s.add(name,value)
或是
s.add(value)
添加xml文档[xml文档为xml读取到的xml文件]
s.addXML(xml)
调用方法
读取s的变量参数名称[通过s[name]添加的无法得到]
s.list
读取s中的变量个数
s.length
读取s的变量深度[若变量中存在数组或是对象 通过add会进一步添加深度 xml表也是一样 通过下级分支不断扩展 深度会增加]
s.depth
直接调用s
若s
加载的为xml文档
那么可以通过s,s[0],s[1],s[0][1][0]这样的方式 查看子分支
例子1
复制内容到剪贴板
代码:
var s:space = new space()
s.add("zszen",www.zszen.com)
s.add([1,[2],[3,[3,4]],[5,[6,[7]]]])
s.length //5
s.depth //3
s.list //0,1,2,3,zszen
s.zszen //www.zszen.com
s[0] //1
s[1][0] //2
s[3][1][1] //7例子2
/*
复制内容到剪贴板
代码:
<?xml version='1.0' encoding='gb2312' ?>
<test>
<part name="part one" value="ok"/>
<part name="part two" value="yeah!!!">
<sub>zszen</sub>
</part>
</test>*/
复制内容到剪贴板
代码:
var s:space=new space()
s.addXML(xml)
s //上面的code
s[0] //包括test的子叉
s[0][1][0] //sub 子叉
s[0][1][0][0] //zszen复制内容到剪贴板
代码:
/*
var s:space = new space()
s.addXML(value)
//s.add([1,[2],[3,[3,4]],[5,[6,[7]]]])
//trace(s[0][1][1].nvalue)
trace(s[0][0].value)
//trace(s[0][1].length)
//trace(s[0][1].list)
*/
dynamic class com_zszen.base.space {
private var name_space:Object
private var dep:Number
private var xmlDateSubAll:XMLNode
public function space() {
name_space = { }
xmlDateSubAll=new XMLNode()
dep=0
}
public function get list():Array {
var ary:Array=[]
for (var name in name_space) {
ary.push(name)
}
return ary
}
public function get depth():Number {
return dep
}
public function get length():Number {
var len:Number=0
for (var name in name_space) {
len++
}
return len
}
public function toString() {
return xmlDateSubAll.toString()
//return "zszen space class"
}
public function add(nameOrValue, valueOrNull) {
if (typeof(nameOrValue) == "object" || typeof(nameOrValue) == "array") {
for (var name in nameOrValue) {
dep = Math.max(dep, addLoopEnd(name, nameOrValue[name], 0))
}
}else{
dep = Math.max(dep, addLoopEnd(nameOrValue, valueOrNull, 0))
}
}
public function addXML(xml:XMLNode) {
dep = addLoopXMLEnd(xml)-1
}
private function addLoopEnd(name:String, value, deep:Number):Number {
if (typeof(value) == "object" || typeof(value) == "array") {
deep++
name_space[name] = null
this[name] = new space()
for (var tname in value) {
this[name].dep = Math.max(this[name].dep, this[name].addLoopEnd(tname, value[tname], deep))
}
return this[name].dep
}else {
name_space[name] = null
this[name] = value
return deep
}
}
public function addLoopXMLEnd(xmldata:XMLNode):Number {
xmlDateSubAll=xmldata
var deep = arguments[1] == null?0:arguments[1] + 1;
var xml:XMLNode = xmldata
add("nname", xml.nodeName)
add("ntype", xml.nodeType)
add("nvalue", xml.nodeValue)
for (var name in xml.attributes) {
add(name,xml.attributes[name])
}
if (xml.hasChildNodes()) {
var maxDeep:Number=0
for (var i = 0; i < xml.childNodes.length; i++) {
this[i.toString()] = new space()
this[i.toString()].dep = this[i.toString()].addLoopXMLEnd(xml.childNodes, 0)
maxDeep=Math.max(this[i.toString()].dep+deep,maxDeep)
}
return maxDeep
}else {
return deep
}
}
}[
本帖最后由 zszen 于 2008-1-9 10:53 编辑 ]