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 |
Класс |
| 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 |
Определяет |
| 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 |
Указывает текущую область |
| XmlTokenizedType |
Представляет тип XML для строки. Это позволяет считать строку как конкретный тип XML, например тип раздела CDATA. |
Делегаты
| Имя | Описание |
|---|---|
| OnXmlDictionaryReaderClose |
|
| XmlNodeChangedEventHandler |
Представляет метод, обрабатывающий NodeChanged, NodeChangingи NodeRemovedNodeInsertedNodeInsertingNodeRemoving события. |
Комментарии
Поддерживаемые стандарты
Пространство System.Xml имен поддерживает следующие стандарты:
- XML 1.0, включая поддержку DTD
- Пространства имен XML, уровни потока и DOM
- XML-схемы
- Выражения XPath
- Преобразования XSLT
- Уровень DOM 1 Core
- Уровень DOM 2 Core
См. раздел "Отличия от спецификаций 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 из ненадежного источника.
Обработка исключений
Исключения, создаваемые компонентами более низкого уровня, могут раскрывать сведения о пути, которые не нужно предоставлять приложению. Приложения должны перехватывать исключения и обрабатывать их соответствующим образом.