An XML serializer that follows the W3C specification.
JavaScript
22
54 commits
updated Sep 21, 2026
An XML serializer that follows the W3C specification.
This package can be used in Node.js, as long as you feed it a DOM node, e.g. one produced by jsdom.
Assume you have a DOM tree rooted at a node node. In Node.js, you could create this using jsdom as follows:
const { JSDOM } = require("jsdom");
const { document } = new JSDOM().window;
const node = document.createElement("akomaNtoso");
Then, you use this package as follows:
const serialize = require("w3c-xmlserializer");
console.log(serialize(node));
// => '<akomantoso xmlns="http://www.w3.org/1999/xhtml"></akomantoso>'
requireWellFormed optionBy default the input DOM tree is not required to be "well-formed"; any given input will serialize to some output string. You can instead require well-formedness via
serialize(node, { requireWellFormed: true });
which will cause Errors to be thrown when non-well-formed constructs are encountered. Per the spec, this largely is about imposing constraints on the names of elements, attributes, etc.
As a point of reference, on the web platform:
innerHTML getter uses the require-well-formed mode, i.e. trying to get the innerHTML of non-well-formed subtrees will throw.xhr.send() method does not require well-formedness, i.e. sending non-well-formed Documents will serialize and send them anyway.Overall
Maintained
Code review
Latest release
Releases this year
An XML serializer that follows the W3C specification.
JavaScript
22
54 commits
updated Sep 21, 2026
An XML serializer that follows the W3C specification.
This package can be used in Node.js, as long as you feed it a DOM node, e.g. one produced by jsdom.
Assume you have a DOM tree rooted at a node node. In Node.js, you could create this using jsdom as follows:
const { JSDOM } = require("jsdom");
const { document } = new JSDOM().window;
const node = document.createElement("akomaNtoso");
Then, you use this package as follows:
const serialize = require("w3c-xmlserializer");
console.log(serialize(node));
// => '<akomantoso xmlns="http://www.w3.org/1999/xhtml"></akomantoso>'
requireWellFormed optionBy default the input DOM tree is not required to be "well-formed"; any given input will serialize to some output string. You can instead require well-formedness via
serialize(node, { requireWellFormed: true });
which will cause Errors to be thrown when non-well-formed constructs are encountered. Per the spec, this largely is about imposing constraints on the names of elements, attributes, etc.
As a point of reference, on the web platform:
innerHTML getter uses the require-well-formed mode, i.e. trying to get the innerHTML of non-well-formed subtrees will throw.xhr.send() method does not require well-formedness, i.e. sending non-well-formed Documents will serialize and send them anyway.Overall
Maintained
Code review
Latest release
Releases this year