Поделиться через


Класс 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.