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


System.Xml Пространство имен

Предоставляет поддержку обработки XML, основанную на стандартах.

Классы

NameTable

Реализует однопотоковый объект XmlNameTable.

UniqueId

Уникальный идентификатор, оптимизированный для GUID.

XmlAttribute

Представляет атрибут. Допустимые значения и значения по умолчанию для атрибута определены в определении типа документа (DTD) или схеме.

XmlAttributeCollection

Представляет коллекцию атрибутов, к которым можно обращаться по имени или индексу.

XmlBinaryReaderSession

Обеспечивает динамическое управление оптимизированными строками

XmlBinaryWriterSession

Позволяет использовать динамический словарь для сжатия общих строк, присутствующих в сообщении и сохраняющих состояние.

XmlCDataSection

Представляет раздел CDATA.

XmlCharacterData

Предоставляет методы обработки текста, которые используются несколькими классами.

XmlComment

Представляет содержимое комментария XML.

XmlConvert

Кодирует и декодирует имена XML и предоставляет методы для преобразования между типами общеязыковой среды выполнения и типами языков определения схем XML (XSD). При преобразовании типов данных возвращаемые значения не зависят от языкового стандарта.

XmlDataDocument

Обеспечивает хранение, получение и управление структурированными данными с использованием реляционного объекта DataSet.

XmlDeclaration

Представляет узел объявления XML <?xml version='1.0'...?>.

XmlDictionary

Реализует словарь, используемый для оптимизации реализаций модулей чтения и записи XML в Windows Communication Foundation (WCF).

XmlDictionaryReader

Класс abstract, который Windows Communication Foundation (WCF) наследует от XmlReader для выполнения сериализации и десериализации.

XmlDictionaryReaderQuotas

Содержит настраиваемые значения квоты для XmlDictionaryReaders.

XmlDictionaryString

Представляет запись, которая хранится в XmlDictionary.

XmlDictionaryWriter

Представляет абстрактный класс, который Windows Communication Foundation (WCF) наследует от XmlWriter для выполнения сериализации и десериализации.

XmlDocument

Представляет XML-документ. Этот класс можно использовать для загрузки, проверки, изменения, добавления и размещения XML-кода в документе.

XmlDocumentFragment

Представляет простой объект, полезный для операций вставки дерева.

XmlDocumentType

Представляет объявление типа документа.

XmlDocumentXPathExtensions

Предоставляет методы расширения для XmlDocument и XmlNode для навигации по документу.

XmlElement

Представляет элемент.

XmlEntity

Представляет объявление сущности, например <!ENTITY... >.

XmlEntityReference

Представляет узел ссылки на сущность.

XmlException

Подробные сведения о последнем исключении.

XmlImplementation

Определяет контекст набора объектов XmlDocument.

XmlLinkedNode

Получает узел, непосредственно предшествующий данному узлу или следующий сразу же за ним.

XmlNamedNodeMap

Представляет коллекцию узлов, к которым можно обращаться по имени или индексу.

XmlNamespaceManager

Разрешает, добавляет и удаляет пространства имен из коллекции и обеспечивает управление областью для этих пространств имен.

XmlNameTable

Таблица атомизированных строковых объектов.

XmlNode

Представляет отдельный узел в XML-документе.

XmlNodeChangedEventArgs

Предоставляет данные для событий NodeChanged, NodeChanging, NodeInserted, NodeInserting, NodeRemoved и NodeRemoving.

XmlNodeList

Представляет упорядоченную коллекцию узлов.

XmlNodeReader

Предоставляет средство чтения, обеспечивающее быстрый прямой доступ (без кэширования) к данным XML в классе XmlNode.

XmlNotation

Представляет объявление нотации, например <!NOTATION... >.

XmlParserContext

Предоставляет все контекстные данные, необходимые объекту XmlReader для анализа фрагмента XML.

XmlProcessingInstruction

Представляет инструкцию по обработке, которая определяется в XML для хранения в тексте документа сведений, относящихся к обработчику.

XmlQualifiedName

Представляет полное имя XML.

XmlReader

Предоставляет средство чтения, обеспечивающее быстрый прямой доступ (без кэширования) к данным XML.

XmlReaderSettings

Задает набор функций, которые должны поддерживаться объектом XmlReader, создаваемым с помощью метода Create.

XmlResolver

Разрешает внешние ресурсы XML, имена которых заданы с помощью универсального кода ресурса (URI).

XmlSecureResolver

Позволяет защитить другую реализацию XmlResolver путем применения программы-оболочки к объекту XmlResolver и ограничения ресурсов, доступ к которым имеет базовый объект XmlResolver.

XmlSignificantWhitespace

Представляет пробел между элементами разметки в смешанном узле содержимого или пробел в области xml:space= 'preserve'. Он также называется значащим пробелом.

XmlText

Представляет текстовое содержимое элемента или атрибута.

XmlTextReader

Предоставляет средство чтения, обеспечивающее быстрый прямой доступ (без кэширования) к данным XML.

Начиная с .NET Framework версии 2.0 рекомендуется использовать класс XmlReader.

XmlTextWriter

Представляет средство записи, предоставляющее способ быстрого прямого создания потоков (без кэширования) или файлов с данными XML, которые соответствуют рекомендациям консорциума W3C по языку XML версии 1.0 и пространств имен в XML.

Начиная с .NET Framework версии 2.0 рекомендуется использовать класс XmlWriter.

XmlUrlResolver

Разрешает внешние ресурсы XML, имена которых заданы с помощью универсального кода ресурса (URI).

XmlValidatingReader

Представляет средство чтения, обеспечивающее проверку определения DTD, схемы XDR и языка определения схемы XML.

Этот класс устарел. Начиная с .NET Framework версии 2.0, рекомендуется использовать класс XmlReaderSettings и метод Create для создания проверяющего средства чтения XML.

XmlWhitespace

Представляет пробел в содержимом элемента.

XmlWriter

Представляет средство записи, обеспечивающее быстрый прямой способ (без кэширования) создания потоков или файлов, содержащих XML-данные.

XmlWriterSettings

Задает набор функций, которые должны поддерживаться объектом XmlWriter, создаваемым с помощью метода Create.

XmlXapResolver

Тип XmlXapResolver используется для разрешения ресурсов в пакете XAP приложения Silverlight.

Интерфейсы

IApplicationResourceStreamResolver

Представляет сопоставитель потока ресурсов приложения.

IFragmentCapableXmlDictionaryWriter

Содержит свойства и методы, которые, при реализации с помощью XmlDictionaryWriter, позволяют обрабатывать фрагменты XML.

IHasXmlNode

Позволяет классу возвращать объект XmlNode из текущего контекста или позиции.

IStreamProvider

Представляет интерфейс, который может реализовываться классами, предоставляющими потоки.

IXmlBinaryReaderInitializer

Предоставляет методы для повторной инициализации средства чтения двоичных данных для считывания нового документа.

IXmlBinaryWriterInitializer

Указывает требования реализации для модулей записи двоичных данных XML, полученных из этого интерфейса.

IXmlDictionary

interface, определяющий контракт, который должен реализовать словарь XML, чтобы быть использованным реализациями XmlDictionaryReader и XmlDictionaryWriter.

IXmlLineInfo

Предоставляет интерфейс для включения класса, возвращающего сведения о строке о позиции.

IXmlMtomReaderInitializer

Указывает требования реализации для MTOM-модулей чтения текста XML, полученных из этого интерфейса.

IXmlMtomWriterInitializer

Будучи реализованным модулем записи MTOM, этот интерфейс обеспечивает инициализацию модуля записи MTOM.

IXmlNamespaceResolver

Предоставляет доступ только для чтения к набору сопоставлений префиксов и пространств имен.

IXmlTextReaderInitializer

Указывает требования реализации для модулей чтения текста XML, полученных из этого интерфейса.

IXmlTextWriterInitializer

Указывает требования реализации для модулей записи текста XML, полученных из этого интерфейса.

Перечисления

ConformanceLevel

Задает количество проверок ввода-вывода, которые выполняют объекты XmlReader и XmlWriter.

DtdProcessing

Задает параметры для обработки DTD. Перечисление DtdProcessing используется классом XmlReaderSettings.

EntityHandling

Задает способ обработки сущностей средством XmlTextReader или XmlValidatingReader.

Formatting

Задает параметры форматирования для XmlTextWriter.

NamespaceHandling

Указывает, нужно ли удалять дубликаты объявлений в объекте XmlWriter.

NewLineHandling

Задает порядок обработки разрывов строк.

ReadState

Задает состояние читателя.

ValidationType

Указывает тип выполняемой проверки.

WhitespaceHandling

Указывает способ обработки пробелов.

WriteState

Задает состояние объекта XmlWriter.

XmlDateTimeSerializationMode

Определяет способ обработки значения времени при преобразовании между строками и объектами DateTime.

XmlDictionaryReaderQuotaTypes

Перечисляет настраиваемые значения квоты для класса XmlDictionaryReaders.

XmlNamespaceScope

Определяет область пространства имен.

XmlNodeChangedAction

Задает тип изменения узла.

XmlNodeOrder

Описывает документный порядок узла по отношению ко второму узлу.

XmlNodeType

Задает тип узла.

XmlOutputMethod

Задает метод, используемый для сериализации выходных данных объекта XmlWriter.

XmlSpace

Задает текущую область xml:space.

XmlTokenizedType

Представляет тип XML для строки. Это позволяет читать строку как определенный тип XML, например как тип раздела CDATA.

Делегаты

OnXmlDictionaryReaderClose

delegate для метода обратного вызова при закрытии модуля чтения.

XmlNodeChangedEventHandler

Представляет метод, обрабатывающий события NodeChanged, NodeChanging, NodeInserted, NodeInserting, NodeRemoved и NodeRemoving.

Комментарии

Поддерживаемые стандарты

Пространство System.Xml имен поддерживает следующие стандарты:

Ознакомьтесь с разделом Отличия от спецификаций W3C для двух случаев, в которых классы XML отличаются от рекомендаций W3C.

.NET также предоставляет другие пространства имен для операций, связанных с XML. Список, описания и ссылки см. в разделе пространства именSystem.Xml.

Асинхронная обработка XML

Классы System.Xml.XmlReader и System.Xml.XmlWriter включают ряд асинхронных методов, основанных на асинхронной модели программирования. Эти методы можно определить по строке "Async" в конце их имен. С помощью этих методов можно написать асинхронный код, аналогичный синхронному коду, и легко перенести существующий синхронный код в асинхронный.

  • Используйте асинхронные методы в приложениях, где наблюдается значительная задержка сетевого потока. Избегайте использования асинхронных API для операций чтения и записи потока памяти или локального файлового потока. Входной поток , XmlTextReaderи XmlTextWriter должны также поддерживать асинхронные операции. В противном случае потоки по-прежнему будут блокироваться операциями ввода-вывода.

  • Не рекомендуется смешивать синхронные и асинхронные вызовы функций, так как вы можете забыть использовать await ключевое слово или использовать синхронный API, где необходим асинхронный.

  • Не устанавливайте для флага XmlReaderSettings.Async или XmlWriterSettings.Async значение , true если вы не планируете использовать асинхронный метод.

  • Если вы забыли await указать ключевое слово при вызове асинхронного метода, результаты будут недетерминированными: вы можете получить ожидаемый результат или исключение.

  • XmlReader Когда объект считывает большой текстовый узел, он может кэшировать только частичное текстовое значение и возвращать XmlReader.Value текстовый узел, поэтому получение свойства может быть заблокировано операцией ввода-вывода. Используйте метод , XmlReader.GetValueAsync чтобы получить текстовое значение в асинхронном режиме, или метод XmlReader.ReadValueChunkAsync для чтения большого блока текста блоками.

  • При использовании объекта вызовите XmlWriter.FlushAsync метод перед вызовом XmlWriterXmlWriter.Close, чтобы избежать блокировки операции ввода-вывода.

Отличия от спецификаций W3C

В двух случаях, связанных с ограничениями на компоненты схемы группы моделей System.Xml , пространство имен отличается от рекомендаций W3C.

Согласованность в объявлениях элементов:

В некоторых случаях при использовании System.Xml групп подстановки реализация не удовлетворяет требованиям "Ограничение компонента схемы: согласованные объявления элементов", которое описано в разделе Ограничения компонентов схемы группы моделей спецификации W3C.

Например, следующая схема включает элементы с одинаковым именем, но разными типами в одной модели содержимого, а также используются группы подстановок. Это может вызвать ошибку, но System.Xml компилирует и проверяет схему без ошибок.

<?xml version="1.0" encoding="utf-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">

   <xs:element name="e1" type="t1"/>
   <xs:complexType name="t1"/>

   <xs:element name="e2" type="t2" substitutionGroup="e1"/>
      <xs:complexType name="t2">
         <xs:complexContent>
            <xs:extension base="t1">
         </xs:extension>
      </xs:complexContent>
   </xs:complexType>

   <xs:complexType name="t3">
      <xs:sequence>
         <xs:element ref="e1"/>
         <xs:element name="e2" type="xs:int"/>
      </xs:sequence>
   </xs:complexType>
</xs:schema>

В этой схеме тип t3 содержит последовательность элементов. По причине подстановки ссылка из последовательности на элемент e1 может привести к образованию либо элемента e1 типа t1, либо элемента e2 типа t2. В последнем случае последовательность из двух e2 элементов, где один относится к типу t2 , а другой — к типу xs:int.

Уникальное присвоение частиц:

При следующих условиях System.Xml реализация не удовлетворяет ограничению компонента схемы: уникальное присвоение частиц, которое описано в разделе Ограничения компонентов схемы группы моделей спецификации W3C.

  • Один из элементов в группе ссылается на другой элемент.

  • Элемент, на который указывает ссылка, является головным элементом группы подстановки.

  • Группа подстановки содержит элемент, имя которого совпадает с именем одного из элементов в группе.

  • Кратность элемента, который ссылается на головной элемент группы подстановки и элемент с тем же именем, что и элемент группы подстановки, не является фиксированным (minOccurs < maxOccurs).

  • Определение элемента, ссылающегося на группу подстановки, предшествует определению элемента с тем же именем, что и у элемента группы подстановки.

Например, в нижеприведенной схеме модель содержимого неоднозначна и может привести к возникновению ошибки компиляции, но System.Xml компилирует схему без ошибок.

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">

  <xs:element name="e1" type="xs:int"/>
  <xs:element name="e2" type="xs:int" substitutionGroup="e1"/>

  <xs:complexType name="t3">
    <xs:sequence>
      <xs:element ref="e1" minOccurs="0" maxOccurs="1"/>
      <xs:element name="e2" type="xs:int" minOccurs="0" maxOccurs="1"/>
    </xs:sequence>
  </xs:complexType>

  <xs:element name="e3" type="t3"/>
</xs:schema>

Если попытаться проверить следующий XML-код на соответствие приведенной выше схеме, проверка завершится ошибкой со следующим сообщением: "Элемент "e3" имеет недопустимый дочерний элемент "e2", и XmlSchemaValidationException будет создано исключение.

<e3>
  <e2>1</e2>
  <e2>2</e2>
</e3>

Чтобы обойти эту проблему, можно поменять объявления элементов в XSD-документе. Пример:

<xs:sequence>
  <xs:element ref="e1" minOccurs="0" maxOccurs="1"/>
  <xs:element name="e2" type="xs:int" minOccurs="0" maxOccurs="1"/>
</xs:sequence>

становится

<xs:sequence>
  <xs:element name="e2" type="xs:int" minOccurs="0" maxOccurs="1"/>
  <xs:element ref="e1" minOccurs="0" maxOccurs="1"/>
</xs:sequence>

Вот еще один пример той же проблемы:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
   <xs:element name="e1" type="xs:string"/>
   <xs:element name="e2" type="xs:string" substitutionGroup="e1"/>

   <xs:complexType name="t3">
      <xs:sequence>
         <xs:element ref="e1" minOccurs="0" maxOccurs="1"/>
         <xs:element name="e2" type="xs:int" minOccurs="0" maxOccurs="1"/>
      </xs:sequence>
   </xs:complexType>
   <xs:element name="e3" type="t3"/>
</xs:schema>

При попытке проверить следующий XML-код на соответствие приведенной выше схеме проверка завершится ошибкой со следующим исключением: "Необработанное исключение: System.Xml. Schema.XmlSchemaValidationException: недопустимый элемент "e2" el . Значение "abc" недопустимо в соответствии с типом 'http://www.w3.org/2001/XMLSchema:int' данных. Строка "abc" не является допустимым значением Int32".

<e3><e2>abc</e2></e3>

Замечания по безопасности

Типы и члены в System.Xml пространстве имен зависят от системы безопасности .NET. В следующих разделах рассматриваются проблемы безопасности, связанные с технологиями XML.

Также обратите внимание, что при использовании System.Xml типов и членов, если XML-код содержит данные, которые могут повлиять на конфиденциальность, необходимо реализовать приложение таким образом, чтобы обеспечить конфиденциальность пользователей.

Внешний доступ

Несколько XML-технологий позволяют получать в ходе обработки другие документы. Например, определение типа документа (DTD) может находиться в документе, для которого выполняется синтаксический анализ. DTD может также находиться во внешнем документе, на который ссылается анализируемый документ. Язык XSD и технологии XSLT также позволяют включать сведения из других файлов. Эти внешние ресурсы могут представлять некоторые проблемы безопасности. Например, необходимо убедиться, что приложение извлекает файлы только с доверенных сайтов, а файл, который оно извлекает, не содержит вредоносных данных.

Класс XmlUrlResolver используется для загрузки XML-документов и разрешения внешних ресурсов, таких как сущности, DTD или схемы, а также для импорта или включения директив.

Этот класс можно переопределить и указать используемый XmlResolver объект. Использовать класс XmlSecureResolver рекомендуется, если вам необходимо открыть ресурс, которым вы не управляете или к которому нет доверия. Класс XmlSecureResolver упаковывает объект XmlResolver и позволяет ограничить ресурсы, доступные для базового объекта XmlResolver.

Отказ в обслуживании

Следующие сценарии считаются менее уязвимыми для атак типа «отказ в обслуживании», так как классы System.Xml обеспечивают средства защиты от таких атак.

  • Синтаксический анализ текстовых XML-данных.

  • Анализ двоичных XML-данных, если двоичные XML-данные были созданы microsoft SQL Server.

  • Запись XML-документов и фрагментов из источников данных в файловую систему, потоки, TextWriter или StringBuilder.

  • Загрузка документов в объект DOM, если используется объект XmlReader, а свойство XmlReaderSettings.DtdProcessing имеет значение DtdProcessing.Prohibit.

  • Навигация по объекту DOM.

Приведенные ниже сценарии использовать не рекомендуются, если есть угроза атак типа «отказ в обслуживании» или при работе в ненадежной среде.

  • Обработка DTD.

  • Обработка схем. Сюда относится добавление в коллекцию схем схемы без доверия, компиляция схемы без доверия и проверка с использованием схемы без доверия.

  • Обработка XSLT.

  • Синтаксический анализ произвольного потока предоставленных пользователем двоичных XML-данных.

  • DOM-операции, например запросы, изменение, перемещение поддеревьев между документами и сохранение объектов DOM.

Если вас беспокоят проблемы с отказом в обслуживании или вы имеете дело с недоверенными источниками, не включайте обработку DTD. Эта функция отключена по умолчанию для XmlReader объектов, создаваемых методом XmlReader.Create .

Примечание

Класс XmlTextReader по умолчанию разрешает обработку DTD. Чтобы отключить эту функцию, воспользуйтесь свойством XmlTextReader.DtdProcessing.

Если включена обработка DTD, можно использовать XmlSecureResolver класс , чтобы ограничить ресурсы, к которым XmlReader может получить доступ. Вы также можете спроектировать приложение так, чтобы обработка XML была ограничена памятью и временем. Например, можно настроить ограничения времени ожидания в приложении ASP.NET.

Рекомендации по обработке

XML-документы могут содержать ссылки на другие файлы, поэтому трудно определить, сколько вычислительных ресурсов потребуется для синтаксического анализа XML-документа. Например, XML-документы могут содержать DTD. Если DTD содержит сущности или сложные модели содержимого, то для синтаксического анализа документа может потребоваться слишком много времени.

При использовании XmlReader можно ограничить размер документа, который может быть подвергнут синтаксическому анализу, задав свойство XmlReaderSettings.MaxCharactersInDocument. Можно ограничить число символов, появляющихся в результате развертывания сущностей, задав свойство XmlReaderSettings.MaxCharactersFromEntities. Примеры настройки этих свойств см. в соответствующих разделах справки.

Технологии XSD и XSLT имеют дополнительные возможности, которые могут влиять на производительность при обработке. Например, можно построить схему XML, для обработки которой даже при сравнительно небольшом размере документа потребуется значительное время. Кроме того, можно внедрять блоки скриптов в таблицу стилей XSLT. Оба случая представляют потенциальную угрозу безопасности для вашего приложения.

При создании приложения, использующего XslCompiledTransform класс , следует учитывать следующие элементы и их последствия:

  • Скрипты XSLT отключены по умолчанию. Скрипты XSLT следует включать только при необходимости в поддержке скриптов и при работе в полностью доверенной среде.

  • Функция XSLT document() отключена по умолчанию. Если функция document() включена, ограничьте ресурсы, к которым можно получить доступ путем передачи объекта XmlSecureResolver методу XslCompiledTransform.Transform.

  • Объекты расширения по умолчанию включены. Если методу XsltArgumentList передается объект XslCompiledTransform.Transform, содержащий объекты расширения, то используются объекты расширения.

  • Таблицы стилей XSLT могут содержать ссылки на другие файлы и внедренные блоки скриптов. Этим может воспользоваться злонамеренный пользователь: он может передать такие данные или таблицы стилей, которые при выполнении будут задействовать все доступные ресурсы компьютера.

  • Приложения XSLT, которые выполняются в среде со смешанным доверием, могут привести к спуфингому таблиц стилей. Например, злонамеренный пользователь может загрузить объект с вредоносной таблицей стилей и передать ее другому пользователю, который впоследствии вызовет метод XslCompiledTransform.Transform и выполнит преобразование.

Чтобы избежать этих проблем безопасности, не следует включатьскрипты или функцию document(), если таблица стилей поступает не из надежного источника, а также не следует принимать объекты XslCompiledTransform, таблицы стилей XSLT или исходные XML-данные из ненадежных источников.

Обработка исключений

Исключения, создаваемые компонентами более низкого уровня, могут раскрывать сведения о пути, которые не должны предоставляться приложению. Приложения должны перехватывать исключения и обрабатывать их соответствующим образом.

См. также раздел