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


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

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

Классы

Имя Описание
NameTable

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

UniqueId

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

XmlAttribute

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

XmlAttributeCollection

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

XmlBinaryReaderSession

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

XmlBinaryWriterSession

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

XmlCDataSection

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

XmlCharacterData

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

XmlComment

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

XmlConvert

Кодирует и декодирует XML-имена и предоставляет методы для преобразования между типами среды CLR и типами языка определения схемы 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

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

XmlDocument

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

XmlDocumentFragment

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

XmlDocumentType

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

XmlDocumentXPathExtensions

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

XmlElement

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

XmlEntity

Представляет объявление сущности, например <! СУЩНОСТЬ... >

XmlEntityReference

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

XmlException

Возвращает подробные сведения о последнем исключении.

XmlImplementation

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

XmlLinkedNode

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

XmlNamedNodeMap

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

XmlNamespaceManager

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

XmlNameTable

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

XmlNode

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

XmlNodeChangedEventArgs

Предоставляет данные для NodeChangedсобытий , и NodeInsertedNodeRemovedNodeChangingNodeInsertingNodeRemoving событий.

XmlNodeList

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

XmlNodeReader

Представляет средство чтения, которое обеспечивает быстрый, не кэшированный перенаправленный доступ только к XML-данным в объекте XmlNode.

XmlNotation

Представляет объявление нотации, например <! НОТАЦИЯ... >

XmlParserContext

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

XmlProcessingInstruction

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

XmlQualifiedName

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

XmlReader

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

XmlReaderSettings

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

XmlResolver

Разрешает внешние XML-ресурсы с именем универсального идентификатора ресурса (URI).

XmlSecureResolver

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

XmlSignificantWhitespace

Представляет пробел между разметкой в узле смешанного содержимого или пробелом в области xml:space= "сохранить". Это также называется значительным пробелом.

XmlText

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

XmlTextReader

Представляет средство чтения, которое обеспечивает быстрый, не кэшированный, доступный только для пересылки доступ к XML-данным.

Вместо этого рекомендуется использовать XmlReader класс.

XmlTextWriter

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

Вместо этого рекомендуется использовать XmlWriter класс.

XmlUrlResolver

Разрешает внешние XML-ресурсы с именем универсального идентификатора ресурса (URI).

XmlValidatingReader

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

Этот класс устарел. Рекомендуется использовать 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

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

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и NodeRemovedNodeInsertedNodeInsertingNodeRemoving события.

Комментарии

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

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

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

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

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

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

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

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

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

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

  • При использовании объекта вызовите XmlWriter.FlushAsync метод перед вызовомXmlWriter, чтобы избежать блокировки операции ввода-выводаXmlWriter.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 также может жить во внешнем документе, на который ссылается анализируемый документ. Технологии определения схемы XML (XSD) и XSLT также могут включать сведения из других файлов. Эти внешние ресурсы могут представлять некоторые проблемы безопасности. Например, вы хотите убедиться, что приложение получает файлы только из доверенных сайтов, а файл, который он извлекает, не содержит вредоносных данных.

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

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

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

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

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

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

  • Написание XML-документов и фрагментов из источников данных в файловую систему, потоки, a TextWriterили a 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 из ненадежного источника.

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

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

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