使用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); }
关键说明
- 字段长度映射:通过
fieldLengthMap定义每个需要拆分的标签对应的元素长度,比如B的每个值是3位,Type是4位。 - 字符串拆分:循环按固定长度截取子串,收集后用逗号连接成目标格式。
- 修复笔误:原代码中
bj[nodeName]是拼写错误,修正为obj[nodeName]。 - 空白处理:用
trim()去除文本首尾可能存在的空白字符,避免拆分出错。
内容的提问来源于stack exchange,提问作者ZMartinez
相关产品推荐
相关产品推荐

