javascript XMLSerializer属性中的特殊字符

时间:2013-01-24 14:56:21

标签: javascript xml xml-parsing xml-serialization escaping

在将特殊字符(如TAB,换行符和回车符)序列化为属性值时遇到问题。

根据此http://www.w3.org/TR/1999/WD-xml-c14n-19991109.html#charescaping,这些应分别编码为&\#x9;&\#xA;&\#xD;。但是打电话给chrome:

var root = new DOMParser().parseFromString('<root></root>', 'text/xml').documentElement;
root.setAttribute('a', 'first\nsecond');
var serialized = new XMLSerializer().serializeToString(root);

提供字符串< root a="first\nsecond"/>,换行未转义。

再次加载时:

var loaded = new DOMParser().parseFromString(serialized, 'text/xml').documentElement;
loaded.getAttribute('a');

返回“第一秒”并且换行丢失到一个空格。以前有人遇到过这个问题吗?任何帮助将不胜感激。

谢谢,

1 个答案:

答案 0 :(得分:0)

我遇到了这个问题,并通过编写一个函数 removeInvalidCharacters(xmlNode)解决了这个问题,该函数删除了XML树中的无效字符(来自nodeValues)。您可以在序列化之前使用它,以确保您不会收到无效字符。

You can find removeInvalidCharacters() in my stackoverflow question on the same topic

你可以像这样使用removeInvalidCharacters():

var stringWithSTX = "Bad" + String.fromCharCode(2) + "News";
var xmlNode = $("<myelem/>").attr("badattr", stringWithSTX);

var serializer = new XMLSerializer();
var invalidXML = serializer.serializeToString(xmlNode);

// Now cleanse it:
removeInvalidCharacters(xmlNode);
var validXML = serializer.serializeToString(xmlNode);

我还提交了针对chrome的问题报告,但值得注意的是IE9在这个部门有自己的错误,因此修复无需解决方法可能需要很长时间。

相关问题