2009-12-18 40 views
2

我的应用程序从外部试图XML保存到磁盘(当它进入XmlWriter为什么.NET XML API不能保护我不受空字符的影响?

System.ArgumentException : '.', hexadecimal value 0x00, is an invalid character. 
时收到字符串和构建XML文档

string fromOutside = "\0"; 
XAttribute a = new XAttribute(fromOutside); 

当属性值包含空字符,然后我得到异常

即使SecurityElement类不利于

Assert.IsFalse(SecurityElement.IsValidAttributeValue("\0")); 

什么是最好的从字符串构造XML文档的方式,可能包含像空字符等无效字符?

回答

2

您不能转义非打印字符,如NULL,因为没有为它们定义的等效转义字符。除非你有十六进制或Base64编码的片段,否则你不能表示它。因此,您可以使用Base64对字符串进行编码或确保它不包含非打印字符。

string fromOutside = "\0"; 
string base64Encoded = Convert.ToBase64String(Encoding.UTF8.GetBytes(fromOutside)); 
XAttribute a = new XAttribute("id", base64Encoded); 
+1

所以在我的情况下,唯一的办法就是分析字符串并删除空人物,不是吗? :-( –

+0

不,你也可以Base64编码字符串:'Convert.ToBase64String(Encoding.UTF8.GetBytes(fromOutside))' –

+1

Base64对我来说不是一个选项,因为我必须保持字符串在结果中可读XML 。字符串的例子可以是“\ 0My \ 0 fancy val \ 0ue \ 0 \ 0 \ 0”。 –

相关问题