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() не будет вызываться).