最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - Unable to create CDATA section in XML using "xmlbuilder" node.js module - Stack Overflow

programmeradmin1浏览0评论

I am using "xmlbuilder" node.js module to create xml file. I need to create a CDATA section as follows:

<notestext><![CDATA[{Notes Text}]]></notestext>

I referred the github link, but didn't found any useful stuff.

How to create such CDATA section in an xml file using "xmlbuilder" node.js module?

let builder = require('xmlbuilder', { encoding: 'utf-8' });
let xml = builder.create('Slides');
xml.ele("notestext","<![CDATA[" + element.notes_text + "]]>");
xml.end({ pretty: true });

console.log(xml.toString());

I am using "xmlbuilder" node.js module to create xml file. I need to create a CDATA section as follows:

<notestext><![CDATA[{Notes Text}]]></notestext>

I referred the github link, but didn't found any useful stuff.

How to create such CDATA section in an xml file using "xmlbuilder" node.js module?

let builder = require('xmlbuilder', { encoding: 'utf-8' });
let xml = builder.create('Slides');
xml.ele("notestext","<![CDATA[" + element.notes_text + "]]>");
xml.end({ pretty: true });

console.log(xml.toString());
Share Improve this question edited Nov 10, 2018 at 20:50 RobC 25.1k21 gold badges84 silver badges86 bronze badges asked Nov 10, 2018 at 11:17 Kushagra SinhaKushagra Sinha 891 silver badge6 bronze badges 0
Add a ment  | 

2 Answers 2

Reset to default 5

From Doc you posted

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');
var builder = require('xmlbuilder', { encoding: 'utf-8' });

var xml = builder.create('slides');
xml.ele('notestext').dat('{Notes Text}');

xml.end({ 
  pretty: true,
  indent: '  '
});

console.log(xml.toString());

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');


发布评论

评论列表(0)

  1. 暂无评论