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 |
Класс |
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 |
|
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 |
Задает текущую область |
XmlTokenizedType |
Представляет тип XML для строки. Это позволяет читать строку как определенный тип XML, например как тип раздела CDATA. |
Делегаты
OnXmlDictionaryReaderClose |
|
XmlNodeChangedEventHandler |
Представляет метод, обрабатывающий события NodeChanged, NodeChanging, NodeInserted, NodeInserting, NodeRemoved и NodeRemoving. |
Комментарии
Поддерживаемые стандарты
Пространство System.Xml имен поддерживает следующие стандарты:
Пространства имен XML на уровне потока и DOM
Ознакомьтесь с разделом Отличия от спецификаций 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-данные из ненадежных источников.
Обработка исключений
Исключения, создаваемые компонентами более низкого уровня, могут раскрывать сведения о пути, которые не должны предоставляться приложению. Приложения должны перехватывать исключения и обрабатывать их соответствующим образом.