1

好的,所以这有点像黑客......但它可能必须是。我正在用 XNA 编写一个应用程序,根据我对这个问题的研究,它显然不支持 XML 1.1 版。我正在阅读 ePub 文档的内容,其中一本较新的书籍将其内容编码为 1.1 版 XML 文档。这会导致我的程序崩溃,但是,结构与其余的相同。唯一使它无法工作的是 XmlDocument 类中的硬编码“1.0”。

是否有可能我可以从流中读取文件,看看它是否包含:

<?xml version="1.1" encoding="UTF-8" standalone="no"?>

并简单地将其替换为“1.0”?然后我可以将它作为 XmlDocument 拉入。我没有对文件进行任何写入,也没有进行任何复杂的结构读取,只是寻找一些特定的节点,然后提取值,所以我不知道这会产生什么后果。

4

1 回答 1

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 文档上对其进行测试。

于 2010-05-25T02:44:39.680 回答