Solution 1:
Utilize the .cdata
(.dat
, or .d
) method and chain each method to generate the XML fragment. For instance:
Javascript:
var builder = require('xmlbuilder');
var element = {
notes_text: '<p>Hello <em>World</em></p>'
};
var xml = builder
.create('slides', { version: '1.0', encoding: 'UTF-8', standalone: true })
.ele('notestext')
.cdata(element.notes_text)
.end({
pretty: true
});
console.log(xml);
Output:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<slides>
<notestext>
<![CDATA[<p>Hello <em>World</em></p>]]>
</notestext>
</slides>
Solution 2:
Another way to write it, which is more similar to your example, is as follows:
var builder = require('xmlbuilder', { encoding: 'utf-8' });
var element = {
notes_text: '<p>Hello <em>World</em></p>'
};
var xml = builder.create('slides');
xml.ele('notestext').cdata(element.notes_text);
xml.end({
pretty: true
});
console.log(xml.toString());
Note: This example uses less method chaining than the previous example, however it does chain the cdata
method to the ele
method.
This prints the following:
<slides>
<notestext>
<![CDATA[<p>Hello <em>World</em></p>]]>
</notestext>
</slides>
Solution 3:
Alternatively, if you don't want to chain any methods you can do something like following:
var builder = require('xmlbuilder');
var element = {
notes_text: '<p>Hello <em>World</em></p>'
};
var rootElement = builder.create('slides');
var childElement = rootElement.ele('notestext')
childElement.cdata(element.notes_text);
rootElement.end({
pretty: true
});
console.log(rootElement.toString());
This also prints the same output as Solution 2.
Additional information:
The docs describe the .cdata
method as follows:
CDATA Nodes
CDATA nodes are created with the cdata
function (can also be abbreviated to dat
or d
). The value should not include CDATA delimiters
ele.dat('this will be surrounded by CDATA delimiters');