-
Notifications
You must be signed in to change notification settings - Fork 179
Open
Description
Also, xml2json crashes if it encounters an unescaped <, >, or & in the XML, but I am not sure whether you would consider that a bug.
Input:
<?xml version="1.0" encoding="UTF-8"?>
<note>
<to>xml-js</to>
<from>ACraig</from>
<heading>Min Example</heading>
<body>Here are some characters that get sanitized: " '</body>
</note>
Code:
var fs = require('fs');
var converter = require('xml-js');
fs.readFile('minexample.xml', 'utf8', function(err, xml) {
if (err) throw err;
console.log('XML:');
console.log(xml);
console.log('compact JSON:');
var json1 = converter.xml2json(xml, {compact: true, spaces: 2});
console.log(json1);
console.log('back-converted XML from compact:');
xmlback1 = converter.json2xml(json1, {compact: true, spaces: 2, sanitize: false});
console.log(xmlback1);
console.log('matches original:');
console.log(xmlback1 == xml);
fs.writeFile('backfromcompact.xml', xmlback1, function(err) {
if(err) {
return console.log(err);
}
console.log('Saved backfromcompact.xml.');
});
console.log('verbose JSON:');
var json2 = converter.xml2json(xml, {compact: false, spaces: 2});
console.log(json2);
console.log('back-converted XML from verbose:');
xmlback2 = converter.json2xml(json2, {compact: false, spaces: 2, sanitize: false});
console.log(xmlback2);
console.log('matches original:');
console.log(xmlback2 == xml);
fs.writeFile('backfromverbose.xml', xmlback2, function(err) {
if(err) {
return console.log(err);
}
console.log('Saved backfromverbose.xml.');
});
});
Output:
XML:
<?xml version="1.0" encoding="UTF-8"?>
<note>
<to>xml-js</to>
<from>ACraig</from>
<heading>Min Example</heading>
<body>Here are some characters that get sanitized: " '</body>
</note>
compact JSON:
{
"_declaration": {
"_attributes": {
"version": "1.0",
"encoding": "UTF-8"
}
},
"note": {
"to": {
"_text": "xml-js"
},
"from": {
"_text": "ACraig"
},
"heading": {
"_text": "Min Example"
},
"body": {
"_text": "Here are some characters that get sanitized: \" '"
}
}
}
back-converted XML from compact:
<?xml version="1.0" encoding="UTF-8"?>
<note>
<to>xml-js</to>
<from>ACraig</from>
<heading>Min Example</heading>
<body>Here are some characters that get sanitized: " '</body>
</note>
matches original:
false
verbose JSON:
{
"declaration": {
"attributes": {
"version": "1.0",
"encoding": "UTF-8"
}
},
"elements": [
{
"type": "element",
"name": "note",
"elements": [
{
"type": "element",
"name": "to",
"elements": [
{
"type": "text",
"text": "xml-js"
}
]
},
{
"type": "element",
"name": "from",
"elements": [
{
"type": "text",
"text": "ACraig"
}
]
},
{
"type": "element",
"name": "heading",
"elements": [
{
"type": "text",
"text": "Min Example"
}
]
},
{
"type": "element",
"name": "body",
"elements": [
{
"type": "text",
"text": "Here are some characters that get sanitized: \" '"
}
]
}
]
}
]
}
back-converted XML from verbose:
<?xml version="1.0" encoding="UTF-8"?>
<note>
<to>xml-js</to>
<from>ACraig</from>
<heading>Min Example</heading>
<body>Here are some characters that get sanitized: " '</body>
</note>
matches original:
false
Saved backfromcompact.xml.
Saved backfromverbose.xml.
Metadata
Metadata
Assignees
Labels
No labels