如何在JavaScript中从XML数据生成含多对象的数组?
解决XML转JavaScript对象数组:商品编号与序列号正确关联的问题
你的核心问题是使用了全局XPath查询,导致商品编号和序列号没有绑定到对应的ProductLine节点上——原代码每次都会取第一个商品编号和所有序列号,完全打乱了对应关系。
正确实现思路
- 先遍历所有
ProductLine节点,每个节点对应一个独立商品条目 - 对每个
ProductLine,用相对路径提取它的商品编号,避免全局查询带来的错误匹配 - 遍历当前
ProductLine下的所有SerialNumber,为每个序列号生成包含对应商品编号的独立对象
修正后的代码
var artList = []; // 获取所有ProductLine节点集合 var productLineNodes = xmlDoc.selectNodes('//ProductLine'); // 逐个处理每个商品条目 for (var idx = 0; idx < productLineNodes.length; idx++) { var currentProductLine = productLineNodes[idx]; // 从当前商品节点下获取编号(相对XPath,确保只取当前节点的子元素) var articleNumber = xmlDoc.getNodeText('./ManufacturerArticleNo', currentProductLine); // 获取当前商品下的所有序列号节点 var serialNodes = xmlDoc.selectNodes('./Serials/SerialNumber', currentProductLine); // 为每个序列号生成独立对象 for (var sIdx = 0; sIdx < serialNodes.length; sIdx++) { var serialNumber = xmlDoc.getNodeText('./text()', serialNodes[sIdx]); artList.push({ ArticleNumber: articleNumber, SerialNumber: serialNumber }); } }
关键修正点说明
- 放弃原嵌套while循环,改为先获取所有
ProductLine节点集合,明确每个商品的边界 - 用相对XPath(以
./开头)查询当前节点的子元素,确保商品编号和序列号属于同一个ProductLine - 每个序列号都基于当前商品编号生成对象,完全满足「每个序列号对应一个独立对象且绑定正确商品编号」的需求
内容的提问来源于stack exchange,提问作者Vejdis
相关产品推荐
相关产品推荐

