From d8c9c8243e4149615f34968e5837dbee1065294c Mon Sep 17 00:00:00 2001 From: Andrew Chilton Date: Fri, 18 Mar 2016 16:48:40 +1300 Subject: [PATCH] Fix up escaping of ]]> inside CDATA sections [fixes #20] --- README.md | 34 +++++++++++++++++++++++++--------- data2xml.js | 2 +- test/xml-generation.js | 16 ++++++++++++++++ 3 files changed, 42 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 8c74580..825f354 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ Installation The easiest way to get it is via npm: - npm install data2xml + npm install --save data2xml Info and Links: @@ -26,6 +26,29 @@ with all your might and enjoy it. Note: this package doesn't depend on any others (except testing in development). This is on purpose so that it doesn't have it's foundation move under it's feet. +Synopsis +-------- + +``` +var data2xml = require('data2xml'); + +var convert = data2xml(); + +var xml1 = convert('Message', 'Hello, World!'); +console.log(xml1); +// -> +// +// Hello, World! + +var xml2 = convert('Message', { + Text: 'Hello, World!' +}); +console.log(xml2); +// -> +// +// Hello, World! +``` + Examples -------- @@ -40,18 +63,11 @@ var data2xml = require('data2xml'); var convert = data2xml(); // or data2xml({}) ``` -... is the same as ... - - -``` -var convert = require('data2xml')(); -``` - Note: in each example, I am leaving out the XML declaration (controlled by the `xmlDecl` option). I am also pretty printing the output - the package doesn't do this for you! ```js -var convert = require('data2xml')(); +var convert = require('data2xml')({ xmlDecl : false }); convert( 'TopLevelElement', diff --git a/data2xml.js b/data2xml.js index c222cac..efc1bcd 100644 --- a/data2xml.js +++ b/data2xml.js @@ -151,7 +151,7 @@ function makeElement(name, data, opts) { if (valElement) { element += entitify(valElement); }else if(data[opts.cdataProp]){ - element += '','')+']]>'; + element += '',']]]]>')+']]>'; } for (var el in data) { if ( el === opts.attrProp || el === opts.valProp || el === opts.cdataProp) { diff --git a/test/xml-generation.js b/test/xml-generation.js index ac911c0..2464adb 100644 --- a/test/xml-generation.js +++ b/test/xml-generation.js @@ -116,6 +116,22 @@ var tests = [ }, exp : declaration + 'My app nameunescaped HTML data.]]>' }, + { + name : 'element with CDATA containing a ]]>', + element : 'name', + data : { + text: [ + { + _attr: { + 'xml:lang': 'de-DE' + }, + _cdata: 'Some text with ]]> inside it.' + }, + ], + _value: 'My app name', + }, + exp : declaration + 'My app name inside it.]]>' + }, ]; test('some simple xml', function (t) {