用Javascript解析XML并创建数组
Parsing XML with Javascript and create array
我正在逐步通过一堆XML,试图在javascript中构建一个数组。
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:(传递details 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合计= TRD3066, 1, 15日,23.1,1解析DIC72000280合计= DIC72000280 1 15278 .26 1, DIC72000280, 1, 15278 .26, 1解析KRE22208合计= KRE22208 1 15日4.65,1,KRE22208, 1, 15日4.65,1,KRE22208, 1, 15日,
4.65, 1这是其中一个晚上,我只是不明白为什么结束tot数组不是所有的单独项目??
我认为这是导致问题的.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);
}
将同一个ret数组的引用多次推入tot,然后更改所引用的ret数组。
还需要注意的是,tot.push(ret)并不是将ret中的每一项都推入tot,而是将ret的引用推入tot。当你在下一轮中改变ret的内容时,它看起来就像tot中的每一项都在改变,因为它们都是对同一个数组的引用。
也许你想用
代替tot.push(ret)tot.push(ret[0], ret[1], ret[2], ret[3], ret[4]);
或者根本不创建ret数组,而是在获得文本时推送单个文本
相关文章:
- knex:根据结果创建数组的合适方法是什么
- 在javascript中创建数组,而不是if.else
- 使用来自不同循环Javascript的数据创建数组
- 尝试从计算创建数组时数组长度无效
- 循环选择标记并创建数组或字符串
- 根据 Array Javascript 中的字符串值动态创建数组名称
- 通过动态创建数组名称在单击函数中引用 javascript 数组
- 如何在不完成添加序列的情况下从rxjs创建数组
- 如何在不创建数组的情况下使用NgFor来生成矩阵UI模式
- 使用jquery从TextArea创建数组
- jquery动态创建数组
- 从现有数组创建数组
- 使用对象的副本创建数组(Javascript)
- 基于分隔符/方括号的实例创建数组
- 如何创建数组取决于是否在jQuery中设置了变量
- 使用JavaScript's Reduce从对象数组创建数组
- 在 JavaScript 中动态创建数组
- 在 javascript 中使 split() 方法使用双引号而不是单引号创建数组
- 在 $.each 函数中使用条件来创建数组
- 如何修改此代码,以便创建数组并将事件添加到数组中