我的应用程序从外部接收字符串并构造XML文档
string fromOutside = "\0";
XAttribute a = new XAttribute(fromOutside);
当属性值包含空字符时,我在尝试将XML保存到磁盘时遇到异常(当它进入XmlWriter
时)
System.ArgumentException : '.', hexadecimal value 0x00, is an invalid character.
即使是SecurityElement
课程也无济于事
Assert.IsFalse(SecurityElement.IsValidAttributeValue("\0"));
从可能包含null字符等无效字符的字符串构造XML文档的最佳方法是什么?
答案 0 :(得分:2)
您无法转义非打印字符(例如NULL),因为没有为它们定义等效的转义字符。除非您有HEX或Base64编码的片段,否则无法表示它。因此,您可以对Base64进行编码,也可以确保它不包含非打印字符。
string fromOutside = "\0";
string base64Encoded = Convert.ToBase64String(Encoding.UTF8.GetBytes(fromOutside));
XAttribute a = new XAttribute("id", base64Encoded);
答案 1 :(得分:0)
我发现了一篇很好的博文,其中作者提供了从字符串中删除无效的不可打印字符的代码
http://seattlesoftware.wordpress.com/2008/09/11/hexadecimal-value-0-is-an-invalid-character/