在 JavaScript (Node.js) 中处理 XML:解析、创建与验证

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

在 Node.js 环境中处理 XML 简介



XML(可扩展标记语言)仍然是存储和传输结构化数据的流行格式,尤其是在企业系统、医疗协议和旧版 API 中。在 Node.js 生态系统中,有多个成熟的库可以高效地解析、创建和修改 XML 文档。在本文中,我们将介绍关键工具:fast-xml-parser、xml2js、xmlbuilder2 和 xpath。



安装必要的包



首先,通过 npm 安装这些包:



npm install fast-xml-parser xml2js xmlbuilder2 xpath


1. 使用 fast-xml-parser 解析 XML



fast-xml-parser 是 JavaScript 中性能最高的 XML 解析库。它支持属性、命名空间以及转换为 JSON。



基本解析



const { XMLParser } = require('fast-xml-parser');

const xmlData = `<bookstore> <book category="fiction"> <title lang="en">The Great Gatsby</title> <author>F. Scott Fitzgerald</author> <year>1925</year> </book></bookstore>`;

const parser = new XMLParser({ ignoreAttributes: false, // 保留属性 attributeNamePrefix: '@_' // 属性前缀});

const result = parser.parse(xmlData);console.log(result.bookstore.book[0].title);// 'The Great Gatsby'console.log(result.bookstore.book[0]['@_category']);// 'fiction'


带错误检查的解析



const { XMLParser, XMLValidator } = require('fast-xml-parser');

const invalidXml = '<root><item>Unclosed';

if (XMLValidator.validate(invalidXml) === true) { const parser = new XMLParser(); const data = parser.parse(invalidXml);} else { console.error('无效的 XML'); // 输出:true(如果有效)或错误对象}


2. xml2js 库——便捷的 JSON 转换



xml2js 提供基于回调的 API,并支持自定义解析设置。



const xml2js = require('xml2js');const parser = new xml2js.Parser({    explicitArray: false, // 单个元素不包装成数组    attrkey: 'attributes'});

const xml = `<person id="123"> <name>John Doe</name> <age>30</age></person>`;

parser.parseString(xml, (err, result) => { if (err) { console.error('解析错误:', err); return; } console.log(result.person.name); // 'John Doe' console.log(result.person.attributes.id); // '123'});


xml2js 的 Promise 封装



const { parseStringPromise } = require('xml2js');

async function parseXML(xmlString) { try { const data = await parseStringPromise(xmlString, { explicitArray: false }); return data; } catch (error) { console.error('错误:', error.message); }}


3. 使用 xmlbuilder2 创建 XML



xmlbuilder2 是一个现代化的 XML 文档生成库,提供链式接口(fluent API)。



简单创建 XML



const { create } = require('xmlbuilder2');

const doc = create({ version: '1.0', encoding: 'UTF-8' }) .ele('catalog') .ele('book', { id: 'b1' }) .ele('title').txt('JavaScript: The Good Parts').up() .ele('author').txt('Douglas Crockford').up() .ele('price', { currency: 'USD' }).txt('29.99').up() .up() .end({ prettyPrint: true });

console.log(doc);


结果:



<?xml version="1.0" encoding="UTF-8"?><catalog>  <book id="b1">    &l                    

推荐