在序列化特殊字符(如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');
返回“第一秒”,换行符丢失到一个空格。有人遇到过这个问题吗?任何帮助,将不胜感激。
谢谢,
维克多
最佳答案
我遇到了这个问题,并通过编写一个函数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在该部门中有其自身的错误,因此没有解决方法的修复可能需要很长时间。