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

使用JavaScript ES5从XML提取标签并格式化对象值为分隔数组

XML标签值拼接问题修复

我尝试通过DOM Parser从XML文件中提取标签及其对应的名称与值,希望将标签名称作为对象的键,对应的值以数组形式存储,但目前值出现了拼接情况。

当前输出

[
  { returnValue: ['0'] },
  { returnComment: [''] },
  { B: ['135136137138139'] },
  { P: ['00000'] },
  { PD: ['00000'] },
  { Type: ['06050605060506050605'] },
  { n: ['5'] },
]; 

期望输出

[
  { returnValue: ['0'] },
  { returnComment: [''] },
  { B: ['135,136,137,138,139'] },
  { P: ['0,0,0,0,0'] },
  { PD: ['0,0,0,0,0'] },
  { Type: ['0605,0605,0605,0605,0605'] },
  { n: ['5'] },
];

现有代码

var childNodesByName=doc.getElementsByTagName(wantedNode).item(0).getChildNodes();

 var nodeArWithValues = [];
 var nodeName;
 for (var w = 0; w < childNodesByName.length; w++) {
    var obj = {};
    nodeName = childNodesByName.item(w).nodeName;
    var nodeValue = childNodesByName.item(w).getTextContent();
    bj[nodeName] = nodeValue;
    nodeArWithValues.push(obj);
}

修改后的代码

核心思路是根据每个标签的固定值长度拆分拼接的字符串,再用逗号连接成目标格式:

var childNodesByName = doc.getElementsByTagName(wantedNode).item(0).getChildNodes();

// 定义需要拆分的标签及其每个元素的固定长度
var fieldLengthMap = {
    'B': 3,
    'P': 1,
    'PD': 1,
    'Type': 4
};

var nodeArWithValues = [];
var nodeName;
for (var w = 0; w < childNodesByName.length; w++) {
    var obj = {};
    nodeName = childNodesByName.item(w).nodeName;
    var nodeValue = childNodesByName.item(w).getTextContent().trim();
    
    if (fieldLengthMap.hasOwnProperty(nodeName)) {
        var length = fieldLengthMap[nodeName];
        var splitValues = [];
        // 按固定长度拆分字符串
        for (var i = 0; i < nodeValue.length; i += length) {
            splitValues.push(nodeValue.substr(i, length));
        }
        // 转成逗号分隔的字符串后放入数组
        obj[nodeName] = [splitValues.join(',')];
    } else {
        // 无需拆分的字段直接保留原值
        obj[nodeName] = [nodeValue];
    }
    
    nodeArWithValues.push(obj);
}

关键说明

  1. 字段长度映射:通过fieldLengthMap定义每个需要拆分的标签对应的元素长度,比如B的每个值是3位,Type是4位。
  2. 字符串拆分:循环按固定长度截取子串,收集后用逗号连接成目标格式。
  3. 修复笔误:原代码中bj[nodeName]是拼写错误,修正为obj[nodeName]。
  4. 空白处理:用trim()去除文本首尾可能存在的空白字符,避免拆分出错。

内容的提问来源于stack exchange,提问作者ZMartinez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 05:45:42