XmlTextReader передает конец XML-документа без распознавания

Я пытаюсь создать простое приложение, которое читает 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, но это также не удалось.

Большое спасибо заранее, ура,

Romout

1 ответ

Я не знаю, если это именно то, что вы ищете, но если вы вместо этого позвоните:

reader.IsStartElement("Models");,

чем <Models/> узел будет проверяться только в том случае, если это начальный тег или пустой элемент тега и если имя совпадает. Считыватель не будет перемещен за его пределы (метод Read() не будет вызываться).

Другие вопросы по тегам