svg 文本实体在 javascript 中设置时被转义

svg text entity is escaped when set in javascript

编辑:我已经有了转义的 XML 字符串。我知道 javascript 有不同的文字语法,我试图避免必须转换。

我想在 javascript 中动态设置 svg 文本元素的文本内容。但是当我在文本内容中使用 XML 实体时,该实体被转义了。 我意识到我可以将 XML 转义序列转换为文字字符,但我不明白为什么:

 e.textContent="Copyright ©";

与 svg 的行为不同:

 <text y="100">Copyright &#x00a9;</text>

后者是版权符号,前者是文字代码

这是显示问题的 fiddle:

https://jsfiddle.net/AaronDavidNewman/4qs9ug53/10/

编辑: 根据 Michael Kay 在下面的回答,我在这里发布了解决方案:

https://jsfiddle.net/AaronDavidNewman/h6svzn98/3/

解析 XML 时实体需要存在...

var dp = new DOMParser();
var tn = dp.parseFromString(...string that contains code

Javascript 转义和 XML 转义的语法不同。对于 javascript,unicode 转义前缀是 \u

window.onload = function() {
    var e = document.createElementNS("http://www.w3.org/2000/svg", "text");    
    e.textContent="Copyright \u00A9";
    document.getElementById("moo-cow").appendChild(e);
}
<svg width="400" height="400" viewBox="0 0 400 200">
  <g id="moo-cow" >
    
  </g>
  <g id="works-fine">
    <text y="100">Copyright &#x00a9;</text>
  </g>
</svg>

XML的树形表示和XML的词法表示是完全不同的东西。 DOM 包含没有任何 XML 转义的字符串 - XML 解析器在解析时删除转义序列,序列化器在序列化时添加回转义序列。

&#x00a9; 不起作用的原因是这种表示法只能被 XML 解析器理解,而您没有使用 XML 解析器处理它。