What is xml-formatter?
The xml-formatter npm package is a utility for formatting XML strings. It helps in making XML data more readable by properly indenting the XML elements. This can be particularly useful for debugging, logging, or displaying XML data in a user-friendly format.
What are xml-formatter's main functionalities?
Basic Formatting
This feature allows you to format a simple XML string, making it more readable by adding appropriate indentation.
const xmlFormatter = require('xml-formatter');
const xml = '<root><child>value</child></root>';
const formattedXml = xmlFormatter(xml);
console.log(formattedXml);
Custom Indentation
This feature allows you to specify custom indentation for the formatted XML string. In this example, two spaces are used for indentation.
const xmlFormatter = require('xml-formatter');
const xml = '<root><child>value</child></root>';
const formattedXml = xmlFormatter(xml, { indentation: ' ' });
console.log(formattedXml);
Removing XML Declarations
This feature allows you to remove XML declarations from the formatted XML string. This can be useful if you want a cleaner output without the XML declaration.
const xmlFormatter = require('xml-formatter');
const xml = '<?xml version="1.0"?><root><child>value</child></root>';
const formattedXml = xmlFormatter(xml, { stripComments: true });
console.log(formattedXml);
Handling Large XML Strings
This feature demonstrates the ability of xml-formatter to handle and format large XML strings efficiently.
const xmlFormatter = require('xml-formatter');
const largeXml = '<root>' + '<child>value</child>'.repeat(1000) + '</root>';
const formattedXml = xmlFormatter(largeXml);
console.log(formattedXml);
Other packages similar to xml-formatter
pretty-data
The pretty-data package provides similar functionality for formatting XML, JSON, and CSS data. It offers a broader range of data formatting options compared to xml-formatter, which is specialized for XML.
xml2js
The xml2js package is primarily used for converting XML to JavaScript objects and vice versa. While it does offer some formatting capabilities, its main focus is on XML parsing and building, making it more versatile for data manipulation tasks.
xmlbuilder
The xmlbuilder package is designed for building XML documents using a simple and chainable API. It also includes formatting options, but its primary strength lies in creating XML documents programmatically.
xml-formatter
Converts XML into a human readable format (pretty print) while respecting the xml:space
attribute.
Reciprocally, the xml-formatter
package can minify pretty printed XML.
The xml-formatter
package can also be used on the browser using the browserified version with a small footprint.
Installation
$ npm install xml-formatter
Example
Usage:
import xmlFormat from 'xml-formatter';
xmlFormat('<root><content><p xml:space="preserve">This is <b>some</b> content.</content></p>');
Output:
<root>
<content>
<p xml:space="preserve">This is <b>some</b> content.</p>
</content>
</root>
Options
filter
(function(node) => boolean
) Function to filter out unwanted nodes by returning false
.indentation
(String, default=' '
) The value used for indentation.collapseContent
(Boolean, default=false
) True to keep content in the same line as the element. Only works if element contains at least one text nodelineSeparator
(String, default=\r\n
) Specify the line separator to usewhiteSpaceAtEndOfSelfclosingTag
(Boolean, default=false
) to either end ad self closing tag with <tag/>
or <tag />
throwOnFailure
(Boolean, default=true
) Throw an error when XML fails to parse and get formatted otherwise the original XML is returned
Usage:
import xmlFormat from 'xml-formatter';
xmlFormat('<root><!-- content --><content><p>This is <b>some</b> content.</content></p>', {
indentation: ' ',
filter: (node) => node.type !== 'Comment',
collapseContent: true,
lineSeparator: '\n'
});
Output:
<root>
<content>
<p>This is <b>some</b> content.</p>
</content>
</root>
Minify mode
Usage:
import xmlFormat from 'xml-formatter';
const xml = `
<root>
<content>
<p>
This is <b>some</b> content.
</p>
</content>
</root>`;
xmlFormat.minify(xml, {
filter: (node) => node.type !== 'Comment',
collapseContent: true
});
Output:
<root><content><p>This is<b>some</b>content.</p></content></root>
On The Browser
The code is transpiled using Babel with @babel/preset-env default values and bundled using browserify.
Using require('xml-formatter')
Page:
<script type="text/javascript" src="dist/browser/xml-formatter.js"></script>
Usage:
const xmlFormatter = require('xml-formatter');
xmlFormat('<root><content><p xml:space="preserve">This is <b>some</b> content.</content></p>');
Using global function xmlFormatter
Page:
<script type="text/javascript" src="dist/browser/xml-formatter-singleton.js"></script>
Usage:
xmlFormatter('<root><content><p xml:space="preserve">This is <b>some</b> content.</content></p>');
Output
<root>
<content>
<p xml:space="preserve">This is <b>some</b> content.</p>
</content>
</root>
License
MIT