Класс System.Xml.XmlTextReader
В этой статье приводятся дополнительные замечания к справочной документации по этому API.
Примечание.
Рекомендуется создавать XmlReader экземпляры с помощью XmlReader.Create метода, чтобы воспользоваться преимуществами новых функций.
XmlTextReader предоставляет доступ только для чтения к потоку XML-данных. Текущим является узел, на котором расположен модуль чтения. Средство чтения дополнительно использует любой из методов чтения и свойств, отражающих значение текущего узла.
Этот класс реализует XmlReader и соответствует расширяемым языку разметки W3C (XML) 1.0 и пространствам имен в рекомендациях XML. XmlTextReader
предоставляет следующие функции:
Применяет правила хорошо сформированного XML.
XmlTextReader
не предоставляет проверку данных.Проверяет, правильно ли
DocumentType
сформированы узлы.XmlTextReader
проверка DTD для хорошо сформированности, но не проверяет использование DTD.Для узлов, где NodeType находится
XmlNodeType.EntityReference
, возвращается один пустойEntityReference
узел (тValue. е. свойство ).String.Empty
Примечание.
Фактические объявления сущностей в DTD называются Entity
узлами. При ссылке на эти узлы в данных они называются EntityReference
узлами.
- Не развертывает атрибуты по умолчанию.
Так как не XmlTextReader
выполняет дополнительные проверка, необходимые для проверки данных, он обеспечивает быстрый синтаксический анализ правильности.
Для выполнения проверки данных используйте проверку XmlReader.
Чтобы считывать XML-данные из XmlDocument, используйте XmlNodeReader.
XmlTextReader
вызывает XmlException ошибки синтаксического анализа XML. После возникновения исключения состояние средства чтения не предсказуемо. Например, тип сообщаемого узла может отличаться от фактического типа узла текущего узла. Используйте свойство, чтобы проверка, находится ли читатель ReadState в состоянии ошибки.
Вопросы безопасности
Ниже приведены аспекты, которые следует учитывать при использовании XmlTextReader класса.
Исключения, которые XmlTextReader могут раскрывать сведения о пути, которые не нужны в приложении. Приложения должны перехватывать исключения и обрабатывать их соответствующим образом.
Обработка определения DTD по умолчанию включена. Отключите обработку DTD, если вас беспокоит проблема с отказом в обслуживании или если вы работаете с ненадежными источниками. DtdProcessing Задайте для свойства отключение Prohibit обработки DTD.
Если обработка DTD включена, то с помощью класса XmlSecureResolver можно ограничить ресурсы, доступные для объекта XmlTextReader. Кроме того, можно создать собственное приложение, ограничивающее объем памяти и время, выделяемое на обработку XML. Например, можно ограничить время ожидания в приложении ASP.NET.
XML-данные могут содержать ссылки на внешние ресурсы, такие как DTD-файл. По умолчанию внешние ресурсы разрешаются с помощью объекта XmlUrlResolver без пользовательских учетных данных. Это можно сделать еще более безопасным, выполнив одно из следующих действий.
Ограничить ресурсы, к которым имеет доступ XmlTextReader, установив в качестве значения свойства XmlResolver объект XmlSecureResolver.
Не разрешать XmlReader открывать какие-либо внешние ресурсы, установив для свойства XmlResolver значение
null
.
XML-данные могут содержать большое количество атрибутов, деклараций пространств имен, вложенных элементов и так далее, на обработку которых требуется значительное время. Чтобы ограничить размер входных данных, отправляемых в него XmlTextReader, создайте пользовательскую реализацию IStream и укажите ее XmlTextReader.
Этот ReadValueChunk метод можно использовать для обработки больших потоков данных. Этот метод за раз считывает небольшое число символов, а не выделяет одну строку для всего значения.
По умолчанию общие сущности не развертываются. Общие сущности раскрываются при вызове метода ResolveEntity.