javascript - 将特殊的 HTML 字符插入 XML

标签 javascript html xml dom escaping

我用 JavaScript 中的这个表达式生成一个 XML 字符串:

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和原来一样?

提前致谢。

最佳答案

正如@forty-two 所建议的,XMLSerializer 解决了这个问题:

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

这会将不间断空格字符直接插入到结果中。 (没有“&”字符。) 读取端无需更改。 谢谢。

关于javascript - 将特殊的 HTML 字符插入 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58267037/

相关文章:

jquery - 你如何在对话框中打开一个 URL JQUERY UI

android - 如何调整ListView中的ImageView?

xml - 如何定义具有模式的 XML 架构 ID 属性?

javascript - 在 Meteor JS 中动态加载多个模板?

javascript - 预填充字段 - WordPress 平台上的 Freshdesk

javascript - 用方向键连续移动div

javascript - 通过 Javascript 动态创建输入标签时,将 ng-autocomplete 添加到输入标签

javascript - 单击 <li> 时在 <li> 下添加一个列表

javascript - 在 node.js 中将数组定义为环境变量

xml - 指定 XML 架构数据类型为小数或空白