Follow XML.com's Converting between XML and JSON patterns.
- Support basic XML (tags, self-closed tags, nested tags, attributes, ...)
- Support
XML.parseandXML.stringify - Support
<?xml ?>prolog declaration - Support
<!DOCTYPE>declaration - Support
<![CDATA[ ]]strings - Support XML entities (
&,&,&, ...) - Support
revivers for custom parsing - Auto-group nodes into arrays when same tag is used
- Auto-unwrap nodes when it only has text content
How reliable is deno.land/x/xml? Check parse tests and
stringify tests π§ͺ
- Comments are stripped and cannot be recovered
- When using mixed content of texts and child nodes, text node will be stripped and cannot be recovered
- When using mixed group of nodes,
XML.stringify(XML.parse()))may result in different order- Example:
<a><b/><c/><b/></a>will result in<a><b/><b/><c/></a> - This may or may not be acceptable depending on your use case
- Example:
import { parse } from "https://deno.land/x/xml/mod.ts";
console.log(parse(`
<root>
<text>hello</text>
<array>world</array>
<array>monde</array>
<array>δΈη</array>
<array>π</array>
<number>42</number>
<boolean>true</boolean>
<complex attribute="value">content</complex>
</root>
`));
/*
Same nodes are grouped into arrays, while numbers and booleans are auto-parsed (can be disabled)
Nodes with attributes will not be flattened and you'll be able to access them with "@" prefix while
text nodes are available through "$" key
{
text:"hello",
array:["world", "monde", "δΈη", "π"],
number:42,
boolean:true,
complex:{
"@attribute":"value",
$:"content",
}
}
*/import { stringify } from "https://deno.land/x/xml/mod.ts";
console.log(stringify({
root: {
text: "hello",
array: ["world", "monde", "δΈη", "π"],
number: 42,
boolean: true,
complex: {
"@attribute": "value",
$: "content",
},
},
}));By default, node contents will be converted to:
nullwhen empty, unlessemptyToNull = falsenumberwhen matching finite numbers, unlessreviveNumbers = falsebooleanwhen matchingtrueorfalse(case insensitive), unlessreviveBooleans = false
XML entities (e.g. &, &, &, ...) will be unescaped
automatically.
You can also provide a custom reviver that will receive key, value and
tag.