simple-xml-to-json

Convert XML to JSON - Fast & Simple

MIT 26 个版本
安装
npm install simple-xml-to-json
yarn add simple-xml-to-json
pnpm add simple-xml-to-json
bun add simple-xml-to-json
README

A simple XML to JSON converter

npm version Test CI codecov

Install

Simply install using NPM in your project directory

npm install simple-xml-to-json

Usage and API

1. convertXML(xmlToConvert [,customConverter])

  • xmlToConvert <string>
  • customConverter <function>
  • Returns: <JSON> by default or other if customConverter is used

2. createAST(xmlToConvert)

  • xmlToConvert <string>
  • Returns: An AST representation of the XML <JSON>

CommonJS (Node.js):

const { convertXML, createAST } = require("simple-xml-to-json")

const myJson = convertXML(myXMLString)
const myYaml = convertXML(myXMLString, yamlConverter)
const myAst = createAST(myXMLString)

ESM (modern frontend apps, Node.js with "type": "module", bundlers):

import { convertXML, createAST } from "simple-xml-to-json"

const myJson = convertXML(myXMLString)
const myYaml = convertXML(myXMLString, yamlConverter)
const myAst = createAST(myXMLString)

TS Typescript compatible


Notes and how to use code

  1. The easiest thing to start is to run node example/example.js (CJS) or node example/example.mjs (ESM) in your terminal and see what happens.
  2. There's the xmlToJson.js file for convenience. Just pass in the XML as a String.
  3. MIT licensed allowing code customization
  4. Profit

How this works in a nutshell

  1. The library converts the XML to an AST
  2. There is a JSON converter that takes the AST and spits out a JSON
  3. You can write your own converters if you need XML-to-ANY-OTHER-FORMAT

Benchmark

Take these results with a grain of salt.
According to a simple benchmark test I performed in April 2024 with a random XML. YMMV. Benchmark Chart

Current Drawbacks

  1. All values are translated to strings in JSON
  2. There are currently reserved words in the JSON converter:
    • "content" - up to version 1.2.3
    • "children"

Default Mapping & Collisions

By default, an element's text content is mapped to a "content" property, while its attributes are mapped directly to JSON properties of the same name.

The Risk

If an XML element possesses an attribute actually named content while also containing text content, a name collision occurs. This typically results in a parsing error or data loss due to duplicate keys.

Example Collision:

<MyElement content="attr-value">text-content</MyElement>

Version 1.2.3+ Fix

To prevent these collisions, versions newer than 1.2.3 will specifically prefix the "content" attribute name with an @ symbol. So the attribute "content" now becomes the "@content" JSON property.

[!NOTE] If you need to, you can write your own converter from the AST created by the parser, and pass it as a 2nd parameter after the xml string

版本列表
1.2.7 2026-04-07
1.2.6 2026-04-07
1.2.5 2026-04-03
1.2.4 2026-03-17
1.2.3 2024-09-14
1.2.2 2024-04-18
1.2.1 2024-04-18
1.2.0 2024-03-18
1.1.7 2023-06-12
1.1.6 2023-05-30
1.1.5 2023-05-23
1.1.4 2023-05-09
1.1.3 2023-04-30
1.1.2 2023-04-30
1.1.1 2023-04-27
1.1.0 2023-04-23
1.0.9 2022-03-26
1.0.8 2021-09-05
1.0.7 2020-04-15
1.0.6 2020-04-12
1.0.5 2020-04-12
1.0.4 2020-04-10
1.0.3 2020-04-10
1.0.2 2019-12-17
1.0.1 2019-12-17
1.0.0 2019-12-16