2011-08-18 73 views
1

我想知道是否有人知道如何做到這一點:我有一個這樣的XML樹 - 我已經按照它們應該出現的順序添加了數字,但這種需要是動態的:XML/Javascript:根據節點層次結構將序列號分配給xml樹

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

當有3個父場景,併爲三個父母的任何數量的兒童和subchildren的。這三個場景中的每一個都將被分配自己的精靈圖像,用於表示每個場景的圖標,並且它的所有子節點都將使用它的父精靈,但是我需要找出一個系統來爲精靈分配正確的背景位置它在樹中的位置。所以我需要做的是說:

每個根精靈都在0px水平。第一個孩子在(1 * 80px)。第二個孩子在2 * 80px。第一個小孩在最後一個孩子身上,加上80px。

所以基本上我需要爲這個序列中的每個節點分配邏輯數字。我如何以數學方式做到這一點?我正在使用javascript(jquery)來解析XML。

感謝您提出任何想法。

+0

有沒有孩子 –

+0

我在上面做得更清楚了,對不起。縮進表示場景是另一場景的孩子。 – mheavers

回答

3

假設你正在使用jQuery 1.5+和你已經有了一個很好形成有效的XML(帶根元素IE)文件你可以做這樣的事情:

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應使每個「場景」元素具有遞增的「id」值。

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