通过XNA中的StreamReader替换XML文件中的单词?

时间:2010-05-24 23:28:12

标签: c# xml xhtml xna xhtml-1.1

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

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

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

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

1 个答案:

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