Skip to content

Commit

Permalink
Fix up escaping of ]]> inside CDATA sections [fixes #20]
Browse files Browse the repository at this point in the history
  • Loading branch information
chilts committed Mar 18, 2016
1 parent 3ab3905 commit d8c9c82
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 10 deletions.
34 changes: 25 additions & 9 deletions README.md
Expand Up @@ -9,7 +9,7 @@ Installation

The easiest way to get it is via npm:

npm install data2xml
npm install --save data2xml

Info and Links:

Expand All @@ -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);
// ->
// <?xml version="1.0" encoding="utf-8"?>
// <Message>Hello, World!</Message>
var xml2 = convert('Message', {
Text: 'Hello, World!'
});
console.log(xml2);
// ->
// <?xml version="1.0" encoding="utf-8"?>
// <Message><Text>Hello, World!</Text></Message>
```

Examples
--------

Expand All @@ -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',
Expand Down
2 changes: 1 addition & 1 deletion data2xml.js
Expand Up @@ -151,7 +151,7 @@ function makeElement(name, data, opts) {
if (valElement) {
element += entitify(valElement);
}else if(data[opts.cdataProp]){
element += '<![CDATA['+data[opts.cdataProp].replace(']]>','')+']]>';
element += '<![CDATA['+data[opts.cdataProp].replace(']]>',']]]]><![CDATA[>')+']]>';
}
for (var el in data) {
if ( el === opts.attrProp || el === opts.valProp || el === opts.cdataProp) {
Expand Down
16 changes: 16 additions & 0 deletions test/xml-generation.js
Expand Up @@ -116,6 +116,22 @@ var tests = [
},
exp : declaration + '<name>My app name<text xml:lang="de-DE"><![CDATA[Some text with <em>unescaped</em> HTML data.]]></text></name>'
},
{
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 + '<name>My app name<text xml:lang="de-DE"><![CDATA[Some text with ]]]]><![CDATA[> inside it.]]></text></name>'
},
];

test('some simple xml', function (t) {
Expand Down

0 comments on commit d8c9c82

Please sign in to comment.