还是XML节点的生成操作问题求助
时间:2011-01-18
来源:互联网
通过一个二维数组,给出节点名称和节点深度,从左往右依次读取,如:
var _array = [["A", 0], ["B", 1], ["B", 1], ["C", 2], ["C", 2], ["D", 3], ["D", 3], ["E",4],["B", 1], ["A", 0],["B",1]];
生成一个XML的节点如上图,深度从左往右依次增加,是0、1、2、3、4……
自己写的没成功,智商不够用,都不知道为什么D和E都消失了,而且冒似数列也不对,我囧死了……
var _xml:XML = new XML();
var _array = [["A", 0], ["B", 1], ["B", 1], ["C", 2], ["C", 2], ["D", 3], ["D", 3], ["E",4],["B", 1], ["A", 0],["B",1]];
for (var i = 0; i<_array.length; i++) {
var temp_node:XMLNode = _xml.createElement(_array[i][0]);
setNode(_xml,_array[i][1],temp_node);
}
trace(_xml);
function setNode(_node, _n:Number, temp_node:XMLNode) {
for (var i = 0; i<_n; i++) {
_node = _node.childNodes[i];
}
trace(_node)
_node.appendChild(temp_node);
}
var _array = [["A", 0], ["B", 1], ["B", 1], ["C", 2], ["C", 2], ["D", 3], ["D", 3], ["E",4],["B", 1], ["A", 0],["B",1]];
生成一个XML的节点如上图,深度从左往右依次增加,是0、1、2、3、4……
自己写的没成功,智商不够用,都不知道为什么D和E都消失了,而且冒似数列也不对,我囧死了……
var _xml:XML = new XML();
var _array = [["A", 0], ["B", 1], ["B", 1], ["C", 2], ["C", 2], ["D", 3], ["D", 3], ["E",4],["B", 1], ["A", 0],["B",1]];
for (var i = 0; i<_array.length; i++) {
var temp_node:XMLNode = _xml.createElement(_array[i][0]);
setNode(_xml,_array[i][1],temp_node);
}
trace(_xml);
function setNode(_node, _n:Number, temp_node:XMLNode) {
for (var i = 0; i<_n; i++) {
_node = _node.childNodes[i];
}
trace(_node)
_node.appendChild(temp_node);
}
作者: hglgsxy 发布时间: 2011-01-18
复制内容到剪贴板
var _array = [["A", 0], ["B", 1], ["B", 1], ["C", 2], ["C", 2], ["D", 3], ["D", 3], ["E", 4], ["B", 1], ["A", 0], ["B", 1]];
var dataArray:Array = [];
var l:Number = _array.length;
while (l--) {
dataArray[_array[l][1]] ? dataArray[_array[l][1]].unshift(_array[l]) : dataArray[_array[l][1]]=[_array[l]];
}
trace(dataArray.join("|"));//直接用这样的数组爽点
//A,0,A,0|B,1,B,1,B,1,B,1|C,2,C,2|D,3,D,3|E,4
_xml.appendChild(_xml.createElement("root"));
var node:XMLNode = _xml.firstChild;
for (l=0; l<dataArray.length; l++) {
for (var _i:Number = 0; _i<dataArray[l].length; _i++) {
node.appendChild(_xml.createElement(dataArray[l][_i][0]));
}
node = node.lastChild;
}
trace(_xml);
//
/*
<root>
<A />
<A>
<B />
<B />
<B />
<B>
<C />
<C>
<D />
<D>
<E />
</D>
</C>
</B>
</A>
</root>
*/
代码:
var _xml:XML = new XML();var _array = [["A", 0], ["B", 1], ["B", 1], ["C", 2], ["C", 2], ["D", 3], ["D", 3], ["E", 4], ["B", 1], ["A", 0], ["B", 1]];
var dataArray:Array = [];
var l:Number = _array.length;
while (l--) {
dataArray[_array[l][1]] ? dataArray[_array[l][1]].unshift(_array[l]) : dataArray[_array[l][1]]=[_array[l]];
}
trace(dataArray.join("|"));//直接用这样的数组爽点
//A,0,A,0|B,1,B,1,B,1,B,1|C,2,C,2|D,3,D,3|E,4
_xml.appendChild(_xml.createElement("root"));
var node:XMLNode = _xml.firstChild;
for (l=0; l<dataArray.length; l++) {
for (var _i:Number = 0; _i<dataArray[l].length; _i++) {
node.appendChild(_xml.createElement(dataArray[l][_i][0]));
}
node = node.lastChild;
}
trace(_xml);
//
/*
<root>
<A />
<A>
<B />
<B />
<B />
<B>
<C />
<C>
<D />
<D>
<E />
</D>
</C>
</B>
</A>
</root>
*/
作者: flash023 发布时间: 2011-01-18
这个D和E出来了。但效果和我想要的并不是一致的。因为你对数组进行了重排,所以C节点出现在了第3个B中,并不是第2个B中。如果是纯粹的单个节点B好像也可以,但每个B元素的节点因为自身还了位置属性,所以前后顺序其实不能换。可能我一开始没有写清楚,只是写了从左往右读。
不过还是谢谢班竹,我再研究研究。
不过还是谢谢班竹,我再研究研究。

作者: hglgsxy 发布时间: 2011-01-18
在你的数组中并没有标识,下一级节点从属于第几个节点,所以是无法根据数组信息来指定
你的C出现在第几个B中
虽然对数组进行了重排,但这只是中间过程,数据仍然是从你的数组中读取来的。
另外写AS,没有“好像”,从态度上讲只能一定, 要么可以,要么不可以,
绝不可“好像可以”。
无论别人的回帖是否与你的要求完全一致,我个人认为都应该谢谢, 为什么楼主要认为“不过还是谢谢” 谢得那么勉强
你的C出现在第几个B中
虽然对数组进行了重排,但这只是中间过程,数据仍然是从你的数组中读取来的。
另外写AS,没有“好像”,从态度上讲只能一定, 要么可以,要么不可以,
绝不可“好像可以”。
无论别人的回帖是否与你的要求完全一致,我个人认为都应该谢谢, 为什么楼主要认为“不过还是谢谢” 谢得那么勉强
作者: flash023 发布时间: 2011-01-18

我的谢谢绝对是由衷的感谢的,并不勉强。只是和我在思考的效果并不一致,所以前面有“不过”二个字,其实是我自己表述的不够清楚和遗漏了一些内容的表述,这“不过”二个字也可以表示为对自己的失望,谢谢还是由衷的。

作者: hglgsxy 发布时间: 2011-01-18
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28