Fast-XML-Parser 使用指南:XML与JSON互转详解
前言
Fast-XML-Parser 是一个高效处理 XML 数据的 JavaScript 库,它提供了 XML 与 JSON 之间的双向转换能力。本文将详细介绍该库的核心功能和使用方法,帮助开发者快速掌握 XML 数据处理技巧。
一、XML 转 JSON
基本用法
const jsonObj = parser.parse(xmlData [,options]);
这是最基本的转换方法,将 XML 字符串转换为 JSON 对象。
完整示例
const parser = require('fast-xml-parser');
const he = require('he'); // HTML实体编码解码库
const options = {
attributeNamePrefix: "@_",
attrNodeName: "attr",
textNodeName: "#text",
ignoreAttributes: true,
ignoreNameSpace: false,
allowBooleanAttributes: false,
parseNodeValue: true,
parseAttributeValue: false,
trimValues: true,
cdataTagName: "__cdata",
cdataPositionChar: "\\c",
parseTrueNumberOnly: false,
numParseOptions: {
hex: true,
leadingZeros: true,
},
arrayMode: false,
attrValueProcessor: (val, attrName) => he.decode(val, {isAttributeValue: true}),
tagValueProcessor: (val, tagName) => he.decode(val),
stopNodes: ["parse-me-as-string"],
alwaysCreateTextNode: false
};
if(parser.validate(xmlData) === true) {
let jsonObj = parser.parse(xmlData,options);
}
验证与转换
验证器可以单独使用,也可以作为解析器的第三个参数:
try {
let jsonObj = parser.parse(xmlData, options, true);
} catch(error) {
console.log(error.message);
}
验证错误时会返回包含详细信息的对象:
{
err: {
code: code,
msg: message,
line: lineNumber,
},
};
关键配置选项解析
- parseNodeValue:将文本节点的值解析为浮点数、整数或布尔值
- parseAttributeValue:将属性值解析为浮点数、整数或布尔值
- trimValues:修剪属性和节点的字符串值
- cdataTagName:将CDATA作为嵌套标签处理
- arrayMode:控制数组转换行为
false
:单次出现的标签作为对象,多次作为数组true
:除叶子节点外都作为数组strict
:所有标签都作为数组- 可传入正则或函数进行更精细控制
- tagValueProcessor:处理标签值的回调函数
- attrValueProcessor:处理属性值的回调函数
- stopNodes:指定哪些标签不需要解析,直接作为字符串处理
二、命令行工具使用
Fast-XML-Parser 提供了命令行工具:
$ xml2js [-ns|-a|-c|-v|-V] <filename> [-o outputfile.json]
$ cat xmlfile.xml | xml2js [-ns|-a|-c|-v|-V] [-o outputfile.json]
常用参数:
-ns
:包含命名空间-a
:忽略属性-c
:忽略值转换-v
:解析前验证-V
:仅验证
三、浏览器端使用
在网页中使用同样简单:
const result = parser.validate(xmlData);
if (result !== true) console.log(result.err);
const jsonObj = parser.parse(xmlData);
四、JSON/JS对象转XML
基本用法
const Parser = require("fast-xml-parser").j2xParser;
const parser = new Parser(options);
const xml = parser.parse(json_or_js_obj);
完整配置示例
const defaultOptions = {
attributeNamePrefix: "@_",
attrNodeName: "@",
textNodeName: "#text",
ignoreAttributes: true,
cdataTagName: "__cdata",
cdataPositionChar: "\\c",
format: false,
indentBy: " ",
suppressEmptyNode: false,
tagValueProcessor: a=> he.encode(a, { useNamedReferences: true}),
attrValueProcessor: a=> he.encode(a, {isAttributeValue: isAttribute, useNamedReferences: true}),
rootNodeName: "element"
};
关键配置选项解析
- attributeNamePrefix:标识属性前缀
- ignoreAttributes:忽略所有属性,全部作为标签处理
- format:是否格式化输出XML
- indentBy:格式化时的缩进字符
- suppressEmptyNode:空标签是否以自闭合形式输出
- rootNodeName:当输入是数组时,指定根节点名称
五、最佳实践建议
- HTML实体处理:建议使用
he
库处理HTML实体编码/解码 - 性能优化:对于大型XML文件,考虑使用流式处理
- 错误处理:始终验证输入XML,捕获可能的解析错误
- 数据完整性:需要完整保留XML信息时,注意配置CDATA相关选项
- 前后端一致:确保序列化和反序列化使用对称的配置选项
结语
Fast-XML-Parser 提供了强大而灵活的XML处理能力,通过合理的配置可以满足各种复杂的XML处理需求。掌握其核心选项和配置技巧,能够显著提升XML数据处理的效率和质量。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考