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

使用多款XML解析器均失败,报错Unencoded <,求助问题原因与解决办法

问题原因与解决办法

为什么所有解析器都报错?

这是因为你的XML文件违反了XML标签命名的基本规则:XML元素的名称不能以数字开头。你里面的<2>、<3>这种标签完全不符合规范,任何合规的XML解析器都会直接报错拒绝处理,所以换多少个库结果都一样。

解决办法

分两种情况处理:

情况1:可以修改XML文件(推荐)

把数字开头的标签改成合法名称,比如:

<thing>
    <item id="2" value="300.0"/>
    <item id="3" value="1.0"/>
</thing>

或者:

<thing>
    <num_2 value="300.0"/>
    <num_3 value="1.0"/>
</thing>

修改后再用你原来的代码就能正常解析了。

情况2:无法修改XML文件

那只能先对XML文本做预处理,把非法标签替换成合法的,再交给解析器处理。比如在读取文件后加一段替换逻辑:

const fs = require("node:fs")
const xml2js = require('xml2js')

const parser = new xml2js.Parser()

let data = fs.readFileSync('test.xml', "utf8")
// 预处理:把<数字开头的标签替换成<num_数字
data = data.replace(/<(\d+)/g, '<num_$1')
// 还要替换闭合标签(如果有的话)
data = data.replace(/<\/(\d+)/g, '</num_$1')

const json = await parser.parseStringPromise(data)
console.log(JSON.stringify(json))

注意:这种预处理是临时方案,只适合简单的XML结构,如果XML里有复杂内容(比如CDATA里也有类似格式)可能会出错,优先推荐修改XML文件本身。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 07:30:46