2012-05-19 36 views
0

海蘭傢伙,的Javascript讀取XML完全錯誤

我正在開發HTML5 /畫布遊戲引擎和我被困。發動機將通過tilesets地圖,並從XML文檔中讀取地圖數據,至極看起來是這樣的:

<map> 
    <layer id="-1"> 
     <row>0,0,0</row> 
     <row>1,1,1</row> 
     <row>0,0,0</row> 
    </layer> 

    <layer id="1"> 
     <row>0,0,0</row> 
     <row>1,1,1</row> 
     <row>0,0,0</row> 
    </layer> 
</map> 

和JavaScript至極加載在一個2維數組中的數據:

var layers = xml.getElementsByTagName("layer"); 
for(var i in layers) 
{ 
    var rows = layers[i].childNodes; 
    for(var j in rows) 
    { 
     array[i][j] = rows[j].nodeValue; 
    } 
} 

問題:返回的數據只是「null」,「」和「undefined」的混雜。此外,該數組似乎更小,然後是必要的,因爲在我檢查所有值之前,我檢查節點的數量(具有長度屬性),並且它總是多於實際的節點數量。

+0

請出示你哪裏也初始化數組行:) –

+0

在JavaScript中,一個'換in'循環用於遍歷對象的屬性,而不是數組元素。使用遞增循環'for(var i = 0; i

回答

3
  1. 使用textContent而不是nodeValue。前者返回正確的值,如"0,0,0"
  2. 由於文本節點也是子節點,所以應該跳過它們(檢查節點的nodeType)。這些正在填充您的陣列孔,並使它們比需要更大。文本節點基本上是縮進的空白。解決這個問題需要額外的計數器。
  3. 使用正常for循環,而不是for in循環。

http://jsfiddle.net/DhKJr/

+0

感謝您的快速回復,代碼的工作原理類似於魅力。我早些時候在文本節點上閱讀過,試圖解決這個問題,但不幸的是它根本無法工作。 –

+0

此外,我只用於循環,因爲我認爲它相當於foreach(是的,我幾乎是Javascript中的新手)。 –