Заменить слово в XML-файле через StreamReader в XNA? - PullRequest
1 голос
/ 25 мая 2010

Хорошо, это что-то вроде хака ... но, возможно, так и должно быть. Я пишу приложение на XNA, которое, судя по моим исследованиям этой проблемы, не поддерживает XML версии 1.1. Я читаю содержимое документа ePub, и одна из новых книг кодирует его содержимое в виде XML-документа версии 1.1. Это приводит к сбою моей программы, однако структура такая же, как и у остальных. Единственное, что мешает ему работать - это жестко закодированный «1.0» в классе XmlDocument.

Возможно ли, что я мог прочитать файл из потока, посмотрите, содержит ли он:

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

и просто заменить его на "1.0"? Тогда я мог бы использовать его как XmlDocument. Я не делаю никакой записи в файл или какого-либо сложного структурного чтения, просто ищу несколько конкретных узлов и извлекаю значения, поэтому я не знаю, каковы будут последствия этого.

1 Ответ

2 голосов
/ 25 мая 2010

Вы можете сделать это очень хитрым способом, прочитав весь 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.

...