2013-06-12 73 views
0

我正在通過一堆XML嘗試在javascript中構建數組。用Javascript解析XML並創建數組

XML:

<?xml version="1.0" encoding="utf8" ?> 
<session> 
    <id>12</id> 
    <name>20130520105033-0-1</name> 
    <userid>0</userid> 
    <changed>2013-05-20 11:16:31</changed> 
    <till>1</till> 
    <custid>1</custid> 
    <details> 
     <item> 
      <prodcode>TRD3066</prodcode> 
      <qty>1</qty> 
      <tax>15</tax> 
      <uprice>23.1</uprice> 
      <price>1</price> 
     </item> 
     <item> 
      <prodcode>DIC72000280</prodcode> 
      <qty>1</qty> 
      <tax>15</tax> 
      <uprice>278.26</uprice> 
      <price>1</price></item> 
     <item> 
      <prodcode>KRE22208</prodcode> 
      <qty>1</qty> 
      <tax>15</tax> 
      <uprice>4.65</uprice> 
      <price>1</price> 
     </item> 
    </details> 
    <comment></comment> 
    <customer_comment></customer_comment> 
</session> 

的Javascript用來解析此: (使信息XML標籤之後)

function parse(details){ 
    var ret=[];var tot=[]; 
    jQuery(details).find("item").each(function(){ 
     ret[0]= jQuery(this).find('prodcode').text(); 
     console.log("parse "+ret[0]); 
     ret[1]= jQuery(this).find('qty').text(); 
     ret[2]= jQuery(this).find('tax').text(); 
     ret[3]= jQuery(this).find('uprice').text(); 
     ret[4]= jQuery(this).find('price').text(); 
     tot.push(ret); 
     console.log("tot="+tot); 
    }); 
    return tot; 
} 

問題控制檯結果是

解析TRD3066 TOT = TRD3066 ,1,15,23.1,解析DIC72000280 tot = DIC72000280,1,15,278.26,1,DIC72000280, 1,15,278.26,1 解析KRE22208 TOT = KRE22208,1,15,4.65,1,KRE22208,1,15,4.65,1,KRE22208,1,15,4.65,1

這是那些夜晚之一,而我只是沒有看到爲什麼最後tot陣列不是所有的單個項目?

回答

3

我認爲這是.each功能所導致的問題,您應該簡單for

var items = jQuery(details).find("item"); 
for (var i = 0; i < items.length; i++) { 
    var ret = []; 
    ret[0] = jQuery(items[i]).find('prodcode').text(); 
    console.log("parse " + ret[0]); 
    ret[1] = jQuery(items[i]).find('qty').text(); 
    ret[2] = jQuery(items[i]).find('tax').text(); 
    ret[3] = jQuery(items[i]).find('uprice').text(); 
    ret[4] = jQuery(items[i]).find('price').text(); 
    tot.push(ret); 
    console.log("tot=" + tot); 
} 
+0

錯過我在for循環中... 但仍然相同的結果!任何其他想法? – Onyx

+0

對不起,錯過了幾行。請再次檢查 –

+0

就是這樣。 var ret = [];下次清理ret數組,並處理項目索引。謝謝UmairP! – Onyx

0

你是推到同一RET陣列多次提及地合計,然後更改替換引用的ret數組。

另請注意,tot.push(ret)不會將每個項目從ret推送到tot,而是將參考push到tot。當你在下一輪更改ret的內容時,它看起來像tot中的每個項目都在變化,因爲它們都是對同一個數組的引用。

也許來代替tot.push(RET)要

tot.push(ret[0], ret[1], ret[2], ret[3], ret[4]); 

還是不要做這樣的RET陣列全天,而是隻是把各個文本,你得到他們。