我正在尝试从包含一些特殊字符的字符串创建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>��?</elem1></root>
答案 0 :(得分:1)
您获取无效XML的原因是您尝试存储对XML文件无效的字符。
根据XML specification
,这里是有效字符列表,它定义了一个所谓的格式良好的XML (这是.NET解析器生成的):
Char ::= #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]
在您的示例中,您尝试存储超出允许字符范围的0x0
和0x1C
。您示例中唯一有效的字符是0x80
。
因此,如果您使用不符合XML标准的无效字节来提供有效的XML,那么您无法从任何.NET解析器获取有效的XML。
为了修复你的get,请确保你已经删除了超出XML规范定义的范围的任何无效字符:
byte[] bytes = new byte[1];
bytes[0] = 0x80;