Невозможно создать раздел CDATA в XML с помощью модуля "xmlbuilder" node.js - PullRequest
0 голосов
/ 10 ноября 2018

Я использую модуль "xmlbuilder" node.js для создания XML-файла. Мне нужно создать раздел CDATA следующим образом:

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

Я ссылался на ссылку github , но не нашел ничего полезного.

Как создать такой раздел CDATA в xml-файле с помощью модуля "xmlbuilder" node.js?

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

Ответы [ 2 ]

0 голосов
/ 10 ноября 2018

Решение 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());

Примечание: В этом примере используется меньше цепочек методов, чем в предыдущем примере, однако он связывает метод cdata с методом ele.

Это печатает следующее:

<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 (также может быть сокращено до dat или d). Значение не должно включать разделители CDATA

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


0 голосов
/ 10 ноября 2018

С Документ Вы отправили

Узлы 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());
...