當序列化特殊字符(如TAB,換行符和回車)作爲屬性值時,我遇到了問題。屬性中的XML XMLSerializer特殊字符
根據這http://www.w3.org/TR/1999/WD-xml-c14n-19991109.html#charescaping,這些應分別編碼爲&\#x9;
,&\#xA;
和&\#xD;
。但撥打鉻:
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');
返回「第一第二」換行丟失只是一個空間。有沒有人遇到過這個問題?任何幫助,將不勝感激。
感謝,
尤
Hey Seth, 感謝您的回答。 看着你的解決方案,它刪除了字符。我其實需要他們。我使用了不同的方法,觀察字符不會被轉義,但保持不變: 'var serializer = new XMLSerializer(); var invalidXML = serializer.serializeToString(xmlNode); var xml = escapeXMLCharacters(invalidXML); ' 幸運的是,我最終不需要反序列化。該解決方案也適用於IE9/8。請記住,這是逃生只有換行,換行符和選項卡,我不需要更多... – Viktor
是!如果這就是你所需要的,那麼這是一個很好的方法。 IE9/8的問題在於它以編程方式賦予所有超出範圍的字符。不幸的是,0x2和其他擴展字符無效,即使以實體形式,即無效。因此,如果您需要能夠存儲交給您的任何字符串而不產生損壞的XML文件(我的目標),則必須在IE9/8授權之前轉義。 – Seth