2

在 javascript 中解析 XML 文件时,我试图保留一些 XML 实体。下面的代码片段说明了这个问题。有没有办法让我进行往返解析并保留 XML 实体(是 nbsp; html)?这发生在 Chrome FF 和 IE10 中。

var aaa='<root><div>&#160;one&#160;two</div></root>'
var doc=new DOMParser().parseFromString(aaa,'application/xml')
new XMLSerializer().serializeToString(doc)
"<root><div> one two</div></root>"

问题是我从 html 中取出一些块并将它们存储在 xml 中,然后我想在完成后将空格恢复到 XML 中。编辑:正如 Dan 和其他人所指出的,解析器用 ascii 代码 160 替换它,在我看来,它看起来像一个普通的空间,但是:

var str1=new XMLSerializer().serializeToString(doc)
str1.charCodeAt(15)
160

因此,无论我的应用程序在哪里丢失空间,它都不在这里。

4

1 回答 1

0

您可以使用范围正则表达式将特殊字符转换回 xml 表示形式。作为一个很好的可重用功能:

function escapeExtended(s){
 return s.replace(/([\x80-\xff])/g, function (a, b) {
   var c = b.charCodeAt();
   return "&#" + b.charCodeAt()+";" 
 });
}


var aaa='<root><div>&#160;one&#160;two</div></root>'
var doc=new DOMParser().parseFromString(aaa,'application/xml')
var str= new XMLSerializer().serializeToString(doc);
alert(escapeExtended(str)); // shows: "<root><div>&#160;one&#160;two</div></root>"

请注意,HTML 实体(ex quot;)将丢失其符号名称,并转换为 XML 实体(&#number; 种类)。如果没有巨大的转换表,您将无法取回名称。

于 2014-07-31T22:42:52.893 回答