Nodejs XML 解析:第一个标签之前的非空格

问题描述 投票:0回答:3

我想在Nodejs中解析XML数据,但总是出现错误: 第一个标签之前不能有空格。

这个错误的原因是,我要解析的文件是UTF-8编码的,并且有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;
const dataWithoutBOM = data.toString().replace(/\uFEFF/g, '');

parseString(dataWithoutBOM, function(err, result){
    if (err) throw err;
    const docguID = result.Trans;
    let docguid;
    let partnerlist=[];
    for (let i = 0; i < 1; i++) {
        const iD = docguID[i];
        docguid= iD.$.DocGUID;
        const partnerList = iD.Partner;
        for (let j = 0; j < partnerList.length; j++) {
           partnerlist.push({
                   name: partner.$.aname,
                   zipcode: partner.$.zipcode,
                   city: partner.$.city,
                   street: partner.$.street
               }
           );
        }
    }
    console.log(docguid, partnerlist);
});
});

我不知道为什么会出现这个错误,因为我正在用空字符串替换 BOM。有谁知道问题出在哪里吗?

node.js xml-parsing byte-order-mark
3个回答
0
投票

我认为这就是所谓的字节顺序标记(BOM)的问题,它是一个 3 字节的“零宽度无中断空格”Unicode 字符,Windows 系统自动将其添加到 UTF-8 文件中。使用十六进制编辑器检查文件时,BOM 显示为十六进制 EFBBBF。

解决这个问题: 请看这个,

https://www.apimock.com/blog/20121127_xml2js-sax-js-non-whitespace-before-first-tag


0
投票

我刚刚保存了新文件并且它有效。我还是不知道我做错了什么。


0
投票

它对我有用。

在将字符串解析为 xml 之前,我删除了所有超出 ASCII 表范围的字符。

removeNonAsciiChars = (value: string): string => {
        let sanitizedString = '';
        let errorCharacters = '';
        for (let i = 0; i < value.length; i++) {
            let code = value.charCodeAt(i);
            //interval ASCII (0-127)
            if (code > 127) {
                errorCharacters += value[i];
            } else {
                sanitizedString += value[i]
            }
        }

        if (errorCharacters) {
            console.log(`The characters: ${errorCharacters} is out of range ASCII and have been removed`);
        }

        return sanitizedString;
    }


xml2js.parseString(removeNonAsciiChars(yourStringToParseXml))

© www.soinside.com 2019 - 2024. All rights reserved.