You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在JavaScript中从XML数据生成含多对象的数组?

解决XML转JavaScript对象数组:商品编号与序列号正确关联的问题

你的核心问题是使用了全局XPath查询,导致商品编号和序列号没有绑定到对应的ProductLine节点上——原代码每次都会取第一个商品编号和所有序列号,完全打乱了对应关系。

正确实现思路

  1. 先遍历所有ProductLine节点,每个节点对应一个独立商品条目
  2. 对每个ProductLine,用相对路径提取它的商品编号,避免全局查询带来的错误匹配
  3. 遍历当前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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 13:41:12