XML / Javascript:根据节点层次结构将序列号分配给xml树

时间:2011-08-18 21:46:42

标签: javascript jquery xml

我想知道是否有人知道如何做到这一点:我有一个这样的XML树 - 我按照应该出现的顺序添加数字,但这需要是动态的:

<scene id="1>
  <scene id="2>
    <scene id="3"/>
  </scene>
  <scene id="4>
<scene id="5>
<scene id="6>

三个父母中有3个父母场景,以及任意数量的子女和子女。三个场景中的每一个都将被分配自己的精灵图像,用于表示每个场景的图标,并且它的所有子场将使用其父精灵,但我需要找出一个系统来为精灵分配正确的背景位置它在树上的位置。所以我需要做的是:

每个根精灵的水平方向为0px。第一个孩子是(1 * 80px)。第二个孩子是2 * 80px。第一个子项是最后一个孩子所在的,加上80px。

基本上我需要为此序列中的每个节点分配逻辑编号。我怎样才能以数学方式做到这一点?我正在使用javascript(jquery)来解析XML。

感谢您提出的任何想法。

1 个答案:

答案 0 :(得分:3)

假设您正在使用jQuery 1.5+并且您已经有了格式良好的有效的XML文档(即使用根元素),您可以执行以下操作:

var nextId = 1;
var xmlStr = '<movie>' +
             '  <scene>' + // id1
             '    <scene>' + // id2
             '      <scene/>' + // id3
             '    </scene>' +
             '    <scene/>' + // id4
             '  </scene>' +
             '  <scene/>' + // id5
             '</movie>';
var doc = $(xmlStr);
$(doc).find('scene').each(function(i, el) {
  el.id = ("id" + nextId++);
});

请注意,有效的“id”属性不能以数字开头,因此新值“id1”等。生成的doc应该使每个“scene”元素具有递增的“id”值。< / p>

doc;
// <movie>​
//   <scene id=​"id1">​
//     <scene id=​"id2">​
//       <scene id=​"id3">​</scene>​
//     </scene>​
//     <scene id=​"id4">​</scene>​
//   </scene>​
//   <scene id=​"id5">​</scene>​
// </movie>​