2014-02-28 28 views
0

我想从包含一些特殊字符的字符串创建一个XML文档。 .NET XML类似乎不正确地转义字符。生成的XML不被我尝试过的任何解析器接受。.NET XML转义问题

XmlDocument doc = new XmlDocument(); 
XmlElement root = doc.CreateElement("root"); 
doc.AppendChild(root); 

XmlElement elem = doc.CreateElement("elem1"); 
root.AppendChild(elem); 

byte[] bytes = new byte[4]; 
bytes[0] = 0; 
bytes[1] = 0; 
bytes[2] = (byte)0x80; 
bytes[3] = 0x1c; 
String val = Encoding.ASCII.GetString(bytes); 

elem.AppendChild(doc.CreateTextNode(val)); 

// Here root.OuterXml is: 
<root><elem1>&#x0;&#x0;?&#x1C;</elem1></root> 
+0

你尝试UTF8编码,而不是ASCII?我的意思是,使用Encoding.UTF8.GetString(字节) – xavigonza

回答

1

您无法获取XML的原因是您试图存储对XML文件无效的字符。

根据XML specification这里有它定义了一个所谓的格式良好的XML(这是.NET解析器产生)有效字符列表:

Char ::= #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF] 

在您的例子如果你正在尝试存储在允许的字符范围之外的0x00x1C。您示例中唯一有效的字符是0x80

因此,如果您使用不符合XML标准的无效字节进行提供,您无法期望从任何.NET解析器获取有效的XML。

为了解决您得到确保你已经摆脱了落在由XML规范定义的范围之外的任何无效字符:

byte[] bytes = new byte[1]; 
bytes[0] = 0x80;