Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье приводятся дополнительные замечания к справочной документации по этому API.
Замечание
Рекомендуем создавать XmlReader экземпляры с помощью XmlReader.Create метода, чтобы воспользоваться новыми функциями.
XmlTextReader предоставляет доступ только для чтения к потоку XML-данных. Текущий узел ссылается на узел, на котором находится ридер. Средство чтения дополнительно использует любой из методов чтения и свойств, отражающих значение текущего узла.
Этот класс реализует XmlReader и соответствует языку расширяемой разметки W3C (XML) 1.0 и рекомендациям W3C для Namespaces in 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 метода.