Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

libxml2-wasm

jameslan17.6kMIT0.5.0

WebAssembly-based libxml2 javascript wrapper

xml, xml parser, libxml, WebAssembly

readme

libxml2-wasm

CI Build on master npm

Why Choose Another XML Library?

When comparing the previous two main approaches — pure JavaScript implementation and traditional C implementation binding — WebAssembly offers a unique combination of advantages. It provides excellent performance while maintaining the best compatibility with modern JavaScript runtimes.

| | Javascript Implementation | Traditional C Binding | WebAssembly | |-------------------------------|:-------------------------:|:----------------------------------:|:-----------------:| | Parsing Speed | Average[^1] | Fast | Fast | | C/C++ Toolchain at Runtime | Not required | Required[^2] | Not Required | | Prebuilt Binaries | N/A | One for each OS / Runtime / Arch | Universal for all | | Prebuilt Binary Compatibility | N/A | May be broken across libc versions | Very Good | | Browser Compatibility | Yes | No | Yes |

Documentation

https://jameslan.github.io/libxml2-wasm/index.html

Supported Environments

Due to the usage of WebAssembly, ES module and top level await etc, this library requires the minimum version of the following environments,

Environment Version
Node.js v16+
Chrome V89+
Edge V89+
Safari v15+

Features

  • Parsing & Querying
  • Validating
  • Modifying
  • Serializing
  • XInclude and XSD include/import (experimental)

Getting started

Install libxml2-wasm package:

npm i libxml2-wasm

libxml2-wasm is an ES module, the import process differs between ES modules and CommonJS modules.

From ES Module

import fs from 'node:fs';
import { XmlDocument } from 'libxml2-wasm';
const doc1 = XmlDocument.fromString('<note><to>Tove</to></note>');
const doc2 = XmlDocument.fromBuffer(fs.readFileSync('doc.xml'));
doc1.dispose();
doc2.dispose();

From CommonJS

const fs = require('node:fs');
import('libxml2-wasm').then(({ XmlDocument }) => {
    const doc1 = XmlDocument.fromString('<note><to>Tove</to></note>');
    const doc2 = XmlDocument.fromBuffer(fs.readFileSync('doc.xml'));
    doc1.dispose();
    doc2.dispose();
});

IMPORTANT: dispose() is required to avoid memory leak.

For more detail, see the Doc.

[^1]: The performance of different XML libraries can vary significantly. For more information, refer to the benchmark provided. [^2]: The requirement of a C/C++ toolchain at runtime can be waived if prebuilt binaries are available.