Я пытаюсь создать простое приложение, которое читает XML с использованием SAX (XmlTextReader) из потока, который содержит не только XML, но и другие данные, такие как двоичные двоичные объекты и текст. Структура потока основана на чанках.
При входе в мою функцию чтения поток правильно позиционируется в начале 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, но это также не удалось.
Большое спасибо заранее,
Cheers,
Romout