2

我正在使用“xmlbuilder”node.js 模块来创建 xml 文件。我需要创建一个 CDATA 部分,如下所示:

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

我参考了 github链接,但没有找到任何有用的东西。

如何使用“xmlbuilder”node.js 模块在 xml 文件中创建这样的 CDATA 部分?

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());
4

2 回答 2

4

来自您发布的文档

CDATA 节点 CDATA 节点是使用 cdata 函数创建的(也可以缩写为 dat 或 d)。该值不应包含 CDATA 分隔符

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());
于 2018-11-10T17:23:36.713 回答
1

解决方案1:

利用.cdata( .dat, 或.d) 方法并链接每个方法来生成 XML 片段。例如:

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

输出

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<slides>
  <notestext>
    <![CDATA[<p>Hello <em>World</em></p>]]>
  </notestext>
</slides>

解决方案2:

另一种写法,更类似于你的例子,如下:

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

注意:这个例子使用的方法链接比前面的例子少,但是它确实将方法链接cdataele方法。

这将打印以下内容:

<slides>
  <notestext>
    <![CDATA[<p>Hello <em>World</em></p>]]>
  </notestext>
</slides>

解决方案3:

或者,如果您不想链接任何方法,您可以执行以下操作:

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

这也打印与解决方案 2相同的输出。


附加信息:

文档描述该.cdata方法如下:

CDATA 节点

CDATA 节点是用cdata函数创建的(也可以缩写为dator d)。该值不应包含 CDATA 分隔符

ele.dat('this will be surrounded by CDATA delimiters');


于 2018-11-10T18:08:26.733 回答