+ -
当前位置:首页 → 问答吧 → 还是XML节点的生成操作问题求助

还是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]];

a.jpg (3.99 KB)
2011-1-18 16:09


生成一个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 _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,没有“好像”,从态度上讲只能一定,  要么可以,要么不可以,
绝不可“好像可以”。

无论别人的回帖是否与你的要求完全一致,我个人认为都应该谢谢, 为什么楼主要认为“不过还是谢谢” 谢得那么勉强

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

斑竹不要误会,之所以说纯粹的B好像可以,是因为我没有试过或仔细的研究过,不过现在看过之后就像你说的是确定一定可以。只是因为我这个B节点每个节点自身所带的属性并不一致,所以我一直在思考那些属性问题。

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

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