好的,所以这有点像黑客......但可能必须如此。我正在XNA中编写一个应用程序,我对此问题的研究显然不支持XML 1.1版。我正在阅读ePub文档的内容,其中一本较新的书籍将其内容编码为1.1版XML文档。这导致程序崩溃,但结构与其余结构相同。唯一让它无法工作的是XmlDocument类中的硬编码“1.0”。
我是否有可能从流中读取文件,看它是否包含:
<?xml version="1.1" encoding="UTF-8" standalone="no"?>
并简单地将其替换为“1.0”?然后我可以将它作为XmlDocument拉入。我没有写任何文件,或任何复杂的结构阅读,只是寻找一些特定的节点,并拉入值,所以我不知道这会产生什么后果。
答案 0 :(得分:2)
您可以通过将整个XML文件读入内存并按照自己的方式以非常狡猾的方式执行此操作:
string content = "";
// Read the XML file into content
StreamReader reader = new StreamReader("file.xml");
content = reader.ReadToEnd();
reader.Close();
// Find the character position just after the <?xml token, and just before the ?> token
int openIndex = content.IndexOf("<?xml", StringComparison.OrdinalIgnoreCase) + 5;
int closeIndex = content.IndexOf("?>", openIndex);
// Get the bits between <?xml and ?>
string header = content.Substring(openIndex, closeIndex - openIndex);
// Substitute version string.
header = header.Replace("version=\"1.1\"", "version=\"1.0\"");
// Put Humpty Dumpty back together again.
content = string.Concat(content.Substring(0, openIndex), header, content.Substring(closeIndex));
// Feed content into an XMLReader (or equivalent) here.
它适用于您提供的示例字符串,但我没有在不完美格式的XML文档上进行测试。