Вопрос

Хорошо, так это своего рода взлома ... но может быть. Я пишу приложение в 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top