Я пытаюсь создать простое приложение, которое читает XML с помощью SAX (XmlTextReader) из потока, который содержит не только XML, но и другие данные, такие как двоичные BLOB-объекты и текст. Структура потока просто основана на фрагментах.
При входе в мою функцию чтения поток правильно позиционируется в начале XML. Я сократил проблему до следующего примера кода:
string xml = "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\"?><Models />" + (char)0x014;
XmlTextReader reader = new XmlTextReader(new StringReader(xml));
reader.MoveToContent();
reader.ReadStartElement("Models");
Эти несколько строк вызывают исключение при вызове ReadStartElement из-за 0x014 в конце строки.
Самое интересное в этом то, что код работает нормально при использовании вместо этого следующего ввода:
string xml = "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\"?><Models></Models>" + (char)0x014;
Я не хочу читать весь документ из-за его размера и не хочу менять ввод, поскольку мне нужно оставаться обратно совместимым со старыми вводами данных.
Единственное решение, которое я могу придумать на первый взгляд, — это пользовательский потоковый ридер, который не продолжает чтение после последнего закрывающего тега, но это потребует значительных усилий по синтаксическому анализу.
Есть ли у вас какие-либо идеи о том, как решить эту проблему? Я уже пытался использовать XDocument LINQ, но это тоже не удалось.
Заранее большое спасибо, Ура,
Роут
new XmlTextReader()
. Он устарел, начиная с .NET 2.0. Вместо этого используйтеXmlWriter.Create()
. - person John Saunders   schedule 28.01.2011