Fast-XML-Parser 使用指南:XML与JSON互转详解

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,
  },
};

关键配置选项解析

  1. parseNodeValue:将文本节点的值解析为浮点数、整数或布尔值
  2. parseAttributeValue:将属性值解析为浮点数、整数或布尔值
  3. trimValues:修剪属性和节点的字符串值
  4. cdataTagName:将CDATA作为嵌套标签处理
  5. arrayMode:控制数组转换行为
    • false:单次出现的标签作为对象,多次作为数组
    • true:除叶子节点外都作为数组
    • strict:所有标签都作为数组
    • 可传入正则或函数进行更精细控制
  6. tagValueProcessor:处理标签值的回调函数
  7. attrValueProcessor:处理属性值的回调函数
  8. 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"
};

关键配置选项解析

  1. attributeNamePrefix:标识属性前缀
  2. ignoreAttributes:忽略所有属性,全部作为标签处理
  3. format:是否格式化输出XML
  4. indentBy:格式化时的缩进字符
  5. suppressEmptyNode:空标签是否以自闭合形式输出
  6. rootNodeName:当输入是数组时,指定根节点名称

五、最佳实践建议

  1. HTML实体处理:建议使用he库处理HTML实体编码/解码
  2. 性能优化:对于大型XML文件,考虑使用流式处理
  3. 错误处理:始终验证输入XML,捕获可能的解析错误
  4. 数据完整性:需要完整保留XML信息时,注意配置CDATA相关选项
  5. 前后端一致:确保序列化和反序列化使用对称的配置选项

结语

Fast-XML-Parser 提供了强大而灵活的XML处理能力,通过合理的配置可以满足各种复杂的XML处理需求。掌握其核心选项和配置技巧,能够显著提升XML数据处理的效率和质量。

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

齐游菊Rosemary

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值