使用fast-xml-parser时如何保留数值前导零?
解决fast-xml-parser前导零丢失问题
当使用fast-xml-parser解析包含前导零的XML值(如<item>08</item>)时,默认会将这类值解析为数字,导致重新生成XML时丢失前导零。以下是具体的解决方案:
核心原因
你代码中设置的parseTrueNumberOnly: true理论上会阻止带前导零的字符串被解析为数字,但可能因版本兼容问题或配置遗漏未生效,导致08被转为数字8,最终生成XML时丢失前导零。
解决方案
方案1:强制所有文本解析为字符串(最稳妥)
修改XMLParser的配置,添加parseNumbers: false,让解析器将所有文本内容保留为字符串类型,不会自动转换为数字:
const { XMLParser, XMLBuilder, XMLValidator } = require("fast-xml-parser"); const options = { parseNumbers: false // 关闭自动数字解析,所有文本保留为字符串 }; const xmlInput = '<item>08</item>'; console.log(xmlInput); const parser = new XMLParser(options); let jsonData = parser.parse(xmlInput); console.log(JSON.stringify(jsonData)); // 输出 {"item":"08"} const builder = new XMLBuilder(); const xmlOutput = builder.build(jsonData); console.log(xmlOutput); // 输出 <item>08</item>
方案2:精细控制数字解析(保留合法数字解析)
如果你需要保留正常数字的解析能力(如123解析为数字),仅排除带前导零的字符串,请确保使用fast-xml-parser v4及以上版本,并使用如下配置:
const options = { parseTrueNumberOnly: true, numberParseOptions: { leadingZeros: false // 禁止解析带前导零的字符串为数字 } };
注意事项
- XMLBuilder的配置与XMLParser独立,无需传递parser的options,只要JSON数据中的值为字符串类型,builder就会原样输出XML内容。
- 若使用旧版本工具,建议升级到最新版以获得更稳定的配置支持。
内容的提问来源于stack exchange,提问作者Jan Thuus
相关产品推荐
相关产品推荐

