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 | Average1 | Fast | Fast |
C/C++ Toolchain at Runtime | Not required | Required2 | 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 |
https://jameslan.github.io/libxml2-wasm/index.html
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+ |
- Parsing & Querying
- Validating
- Modifying
- Serializing
- XInclude and XSD include/import (experimental)
Install libxml2-wasm
package:
npm i libxml2-wasm
libxml2-wasm
is an ES module,
the import process differs between ES modules and CommonJS modules.
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();
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.