.NET XML转义问题

时间:2014-02-28 21:07:13

标签: .net xml escaping

我正在尝试从包含一些特殊字符的字符串创建XML文档。 .NET XML类似乎错误地转义了字符。我尝试过的任何解析器都不接受生成的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>

1 个答案:

答案 0 :(得分:1)

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

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

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

在您的示例中,您尝试存储超出允许字符范围的0x00x1C。您示例中唯一有效的字符是0x80

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

为了修复你的get,请确保你已经删除了超出XML规范定义的范围的任何无效字符:

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