Проблема при печати угловых скобок с помощью модуля узла xml-builder - PullRequest
0 голосов
/ 09 ноября 2018

Я создаю xml-файл, используя модуль узла "xml-builder". Но когда я попытался написать угловые скобки («<» или «>»), у меня появились такие символы, как «<» и «>». Код выглядит следующим образом:

let builder = require('xmlbuilder', { encoding: 'utf-8' });
let name = "ABC";
let xml = builder.create('Slides');
xml.ele('props',"Hello").up();
xml.ele('name',"<Hello> "+name+" </Hello>").up();
xml.end({ pretty: true });
console.log(xml.toString())

Вывод выглядит следующим образом:

<Slides>
  <props>Hello</props>
  <name>&lt;Hello&gt; ABC &lt;/Hello&gt;</name>
</Slides>

Что я должен сделать, чтобы напечатать < или > вместо &lt; или &gt;?

Ответы [ 2 ]

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

Проблема в том, что вы пытаетесь создать дочерний элемент неверным способом, передавая xml в поле value поля xml.ele. Модуль правильно экранирует ваши угловые скобки.

Вам нужно создать еще один элемент с именем Hello и добавить его к элементу name. Вы можете сделать это либо цепочкой вызовов .ele, либо используя их возвращаемые значения.

Вот правильный код:

let builder = require('xmlbuilder', { encoding: 'utf-8' });
let name = "ABC";
let xml = builder.create('Slides');
xml.ele('props',"Hello");
xml.ele('name')
   .ele("Hello", name);
xml.end({ pretty: true });
console.log(xml.toString())

Выход:

<Slides>
  <props>Hello</props>
  <name>
    <Hello>ABC</Hello>
  </name>
</Slides>
0 голосов
/ 09 ноября 2018

Существует модуль npm decode-html , который будет обрабатывать тот же сценарий использования, что и ваш.

var decode = require('decode-html');

console.log(decode('&lt;div class="hidden"&gt;NON&amp;SENSE&apos;s&lt;/div&gt;'));
// -> '<div class="hidden">NON&SENSE\'s</div>'
...