2014-02-28 50 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;