XML到JSON的最简单映射方法-XML/RSS教程

XML转扁平JSON首选xml2js(ignoreAttrs: true),禁用JSON.stringify(XMLDocument);复杂场景用fast-xml-parser;浏览器端可DOM API应急但限制多。

XML字符串直接转为扁平JSON对象(无嵌套)

如果XML结构简单、没有重复标签、不关心属性和文本混合,xml2js 的默认解析器配合 ignoreAttrs: true 和 mergeAttrs: false 是最轻量的路径。它把每个元素转成键值对,值是其文本内容,忽略所有属性。

常见错误:直接用 JSON.stringify(xmlDoc) —— 浏览器原生 XMLDocument 对象不能这样序列化,会得到空对象或报错 TypeError: Converting circular structure to JSON。

  • 适用场景:配置文件、单层API响应(如 ok200)
  • 不适用:含同名子节点(如多个 )、含属性()、含 CDATA 或注释
  • 性能影响:小XML(xml2js.Parser({ async: true }))

保留属性和文本内容的通用映射(推荐默认方案)

真实XML往往含属性(id、type)和混合内容(文本+子节点),此时必须区分 #text 和 @attributes。用 xml2js 配置 explicitArray: false 和 explicitChildren: true 可避免冗余数组包装,让结构更贴近直觉。

const xml2js = require('xml2js');
const parser = new xml2js.Parser({
  explicitArray: false,
  explicitChildren: true,
  childkey: '$',
  charsAsChildren: true,
  mergeAttrs: true
});

// 输入:Tom30
// 输出:{ user: { $: { id: "123" }, name: "Tom", age: "30" } }

关键点:

  • $ 键固定存放属性(由 childkey: '$' 指定),避免与子元素名冲突
  • charsAsChildren: true 确保纯文本节点也作为子项出现,否则顶层文本会被丢弃
  • 若XML有多个同名子节点(如 AB),explicitArray: false 会把它变成对象而非数组 —— 这是坑,需手动检测类型再归一化

处理重复子节点( 多次出现)

XML中重复标签是常见痛点:xml2js 默认把多个 合并为一个对象(只保留最后一个),除非启用 explicitArray: true。但开启后所有子节点都变数组,哪怕只有一个 —— 不够干净。

折中做法:保持 explicitArray: false,解析后递归扫描值是否为数组,对已知重复标签(如 item、entry)做后处理:

夏夕资源网专注于CMS网站模板,主流语言整站网站源码下载,网站建设相关教程分享,好用的软件素材整合下载,提供一站式便捷自助服务。
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"zy.lucklyus.top",如遇到无法解压的请联系管理员!
夏夕资源网-网站模板_免费源码_资源素材 » XML到JSON的最简单映射方法-XML/RSS教程
在线时间:12:00 - 22:00
关注微信公众号:微信公众号
站长邮箱:[email protected]
  • 运营天数: 1392+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 4007878+
  • 本周更新: 0+
  • 最后更新: 2026-03-16

本站指数

×
  • 运营天数: 1392+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 4007878+
  • 本周更新: 0+
  • 最后更新: 2026-03-16