Замените слово в файл XML через StreamReader в XNA?
Вопрос
Хорошо, так это своего рода взлома ... но может быть. Я пишу приложение в XNA, что из моих исследований в этой проблеме, по-видимому, не поддерживает XML версии 1.1. Я читаю в содержании документа EPUB, и одна из более новых книг кодирует свой контент как версию 1.1 XML-документа. Это приводит к тому, что моя программа потерпела крах, однако структура такая же, как остальные. Единственное, что удерживает его от работы, - это жестко закодированная «1,0» в классе XMLDocument.
Возможно ли, что я мог бы прочитать в файле из потока, посмотреть, содержит ли он:
<?xml version="1.1" encoding="UTF-8" standalone="no"?>
И просто замените его "1.0"? Тогда я мог бы потянуть его как XMLDocument. Я не делаю записи в файл или любое сложное структурное чтение, просто ищете несколько конкретных узлов и потянув в ценности, поэтому я не знаю, каковы последствия этого будут.
Решение
Вы можете сделать это очень крутым способом, читая весь файл 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.