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

Node.js解析XML遇Non-whitespace before first tag错误,已处理BOM仍未解决

问题排查与修复

解析错误(Non-whitespace before first tag)的修复

你当前的BOM去除方式存在潜在偏差,字符串替换可能因编码转换问题导致BOM未被彻底移除,建议改用更可靠的二进制层面处理:

const xml2js = require('xml2js');   
const fs = require('fs');
const parseString = require('xml2js').parseString;

fs.readFile('data.xml', function(err, data){
  if (err) throw err;
  // 从Buffer层面移除UTF-8 BOM(二进制标识为EF BB BF)
  if (data.length >= 3 && data[0] === 0xEF && data[1] === 0xBB && data[2] === 0xBF) {
    data = data.slice(3);
  }
  const dataWithoutBOM = data.toString('utf8');

  parseString(dataWithoutBOM, function(err, result){
    // ...后续解析代码
  });
});

如果偏好字符串层面处理,也可以优化替换逻辑,只匹配开头的BOM(避免误替换中间可能出现的相同字符):

const dataWithoutBOM = data.toString('utf8').replace(/^\uFEFF/, '');

代码中的运行时错误

即使XML解析成功,你的代码也会因变量未定义报错:遍历partnerList时,未将partnerList[j]赋值给partner变量,需补充这行代码:

for (let j = 0; j < partnerList.length; j++) {
  const partner = partnerList[j]; // 新增此行
  partnerlist.push({
          name: partner.$.aname,
          zipcode: partner.$.zipcode,
          city: partner.$.city,
          street: partner.$.street
      }
  );
}

额外优化建议

外层循环for (let i = 0; i < 1; i++)仅执行一次,若你确认result.Trans数组只有一个元素,可直接用const iD = docguID[0];代替循环,代码更简洁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 05:45:39