Вставка специальных символов HTML в XML - PullRequest
4 голосов
/ 07 октября 2019

Я создаю строку XML с этим выражением в JavaScript:

var xml = '<xml xmlns="http://www.w3.org/1999/xhtml">' + dom.outerHTML + '</xml>'

(dom - это некоторый узел в дереве документа.)

Позже я прочитал это обратно с помощью:

... = (new DOMParser).parseFromString(xml, "text/xml");

Обычно он работает нормально, но завершается неудачно, если одно из полей в dom содержит символ пробела без пробелов, вводимый вручную с помощью Alt + 0160. В dom.outerHTML это выглядит как &nbsp;, но функция parseFromString возвращает это:

<xml xmlns="http://www.w3.org/1999/xhtml">
    <parsererror style="display: block; white-space: pre; border: 2px solid #c77; padding: 0 1em 0 1em; margin: 1em; background-color: #fdd; color: black">
        <h3>This page contains the following errors:</h3>
        <div style="font-family:monospace;font-size:12px">error on line 1 at column 139: Entity 'nbsp' not defined↵</div>
        <h3>Below is a rendering of the page up to the first error.</h3>
    </parsererror>
    ...
</xml>

(Это на самом деле результат функции, а не исключение! Очень странное решение (:.)

Я тоже пытался &amp;nbsp;, это удалось без тега <parsererror>, но было прочитано как строка "&nbsp;", а не кодовая точка UNICODE 160.

Возможно, другие символы спецификации HTMLтакже затрагиваются.

Где и как я должен экранировать / заменить специальные символы HTML, чтобы получить в точности то же самое dom, что и оригинал?

Заранее спасибо.

1 Ответ

1 голос
/ 07 октября 2019

Как подсказал @ сорок два, XMLSerializer решил проблему:

var xml = '<xml xmlns="http://www.w3.org/1999/xhtml">' 
  + (new XMLSerializer).serializeToString(dom) 
  + '</xml>'

Это вставляет неразрывный пробел непосредственно в результат. (Без символов «&».) Сторона чтения не нуждается в изменениях. Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...