+ -
当前位置:首页 → 问答吧 → 请允许我重新开个贴子,重头整理了一下代码,还是不知道问题出在哪里……

请允许我重新开个贴子,重头整理了一下代码,还是不知道问题出在哪里……

时间:2011-01-19

来源:互联网

请允许我重新开个贴子,重头整理了一下代码,还是不知道问题出在哪里——关于XML节点生成的。

这个二维数组是从数据库生成的的一个文件,我在FLASH中从外部文件将它读取了进来。然后需要生成如图所示的效果,因为每个节点在读取时带有自身的属性(里面用黑色的1、2、3、4……表示了),所以元素节点的位置不能重排;第二维表示元素的层级深度,每个元素的层级深度都是已知的(里面用红色的0、1、2、3、4……表示了)。
var _array = [["A1", 0], ["B1", 1], ["C1", 2], ["B2", 1], ["C2", 2], ["C3", 2], ["D1", 3], ["D2", 3], ["E1", 4], ["B3", 1], ["A2", 0], ["B4", 1]];
a.jpg (4.3 KB)
2011-1-19 15:40


今天已经是被折磨的第三天了,自己写的代码,还是不知道错在哪里,真是连猜带蒙的。
(我的算法是当前元素的深度与前一次元素的深度相比较,如果深度变大,就让它成为上一个节点的子节点;如果深度一样大,那么和前一次的元素是并列关系的节点;如果深度为负数,那么和前一次元素的某个父级点是并列关系的节点;可是写出来的代码输出后,还是并非我想要的效果。)

如果可以还是请大家帮忙指正,用AS2或3都没有关系,语法我自己可以转换的;或者请帮我指出我上面的算法错在哪里(以我的智商实在想不出这算法错在哪里)

var _xml:XML = new XML();
var last_level = 0;//上一次层级深度
var now_level = 0;//现在的层级深度
var distance_level = 0;//二次相差几个层级深度
var _node = _xml;//上一次被处理过的XML节点
var _array = [["A1", 0], ["B1", 1], ["C1", 2], ["B2", 1], ["C2", 2], ["C3", 2], ["D1", 3], ["D2", 3], ["E1", 4], ["B3", 1], ["A2", 0], ["B4", 1]];
for (var i = 0; i<_array.length; i++) {
       //读取第一个元素
       var temp_element = _array[i][0];
       //创建元素
       var temp_node:XMLNode = _xml.createElement(temp_element);
       //创建深度
       now_level = _array[i][1];
       distance_level = now_level-last_level;
       //设置路径
       setNode(_node,temp_node);
       //上一次层级深度
       last_level = now_level;
}
trace(_xml);
function setNode(xml_node, temp_node) {
       if (distance_level>0) {
              for (var i = 0; i<distance_level; i++) {
                     _node = _node.childNodes[i];
              }
       } else if (distance_level<0) {
              for (var i = 0; i<Math.abs(distance_level); i++) {
                     _node = _node.parentNode;
              }
       }
       _node.appendChild(temp_node);
}
生成后的节点并非如我所愿……
<A1>
       <B1>
              <C1>
                     <D1>
                            <E1 />
                     </D1>
                     <D2 />
              </C1>
              <C2 />
              <C3 />
       </B1>
       <B2 />
       <B3 />
       <B4 />
</A1>
<A2 />

[ 本帖最后由 hglgsxy 于 2011-1-19 15:41 编辑 ]

作者: hglgsxy   发布时间: 2011-01-19

http://bbs.blueidea.com/viewthread.php?tid=3010846&highlight=
http://bbs.blueidea.com/viewthread.php?tid=3010981&highlight=

作者: flash023   发布时间: 2011-01-19