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

Пространство имен System.Xml предоставляет основанную на стандартах поддержку обработки XML. The System.Xml namespace provides standards-based support for processing XML.

Классы

NameTable

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

UniqueId

Уникальный идентификатор, оптимизированный для GUID.A unique identifier optimized for Guids.

XmlAttribute

Представляет атрибут.Represents an attribute. Допустимые значения атрибута и его значения по умолчанию определены в определении DTD или схеме.Valid and default values for the attribute are defined in a document type definition (DTD) or schema.

XmlAttributeCollection

Представляет коллекцию атрибутов, к которым можно обращаться по имени или индексу.Represents a collection of attributes that can be accessed by name or index.

XmlBinaryReaderSession

Обеспечивает динамическое управление оптимизированными строкамиEnables optimized strings to be managed in a dynamic way.

XmlBinaryWriterSession

Позволяет использовать динамический словарь для сжатия общих строк, присутствующих в сообщении и сохраняющих состояние.Enables using a dynamic dictionary to compress common strings that appear in a message and maintain state.

XmlCDataSection

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

XmlCharacterData

Обеспечивает методы обработки текста, которые используются несколькими классами.Provides text manipulation methods that are used by several classes.

XmlComment

Представляет содержимое XML-комментария.Represents the content of an XML comment.

XmlConvert

Кодирует и декодирует имена XML и предоставляет методы для преобразования между типами общеязыковой среды выполнения и типами языков определения схем XML (XSD).Encodes and decodes XML names, and provides methods for converting between common language runtime types and XML Schema definition language (XSD) types. При преобразовании типов данных возвращаемые значения не зависят от языкового стандарта.When converting data types, the values returned are locale-independent.

XmlDataDocument

Обеспечивает хранение, получение и управление структурированными данными с использованием реляционного объекта DataSet.Allows structured data to be stored, retrieved, and manipulated through a relational DataSet.

XmlDeclaration

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

XmlDictionary

Реализует словарь, используемый для оптимизации реализаций модулей чтения и записи XML в Windows Communication Foundation (WCF).Implements a dictionary used to optimize Windows Communication Foundation (WCF)'s XML reader/writer implementations.

XmlDictionaryReader

Класс abstract, который Windows Communication Foundation (WCF) наследует от XmlReader для выполнения сериализации и десериализации.An abstract class that the Windows Communication Foundation (WCF) derives from XmlReader to do serialization and deserialization.

XmlDictionaryReaderQuotas

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

XmlDictionaryString

Представляет запись, которая хранится в XmlDictionary.Represents an entry stored in a XmlDictionary.

XmlDictionaryWriter

Представляет абстрактный класс, который Windows Communication Foundation (WCF) наследует от XmlWriter для выполнения сериализации и десериализации.Represents an abstract class that Windows Communication Foundation (WCF) derives from XmlWriter to do serialization and deserialization.

XmlDocument

Представляет XML-документ.Represents an XML document. Этот класс можно использовать для загрузки, проверки, изменения, добавления и размещения XML-кода в документе.You can use this class to load, validate, edit, add, and position XML in a document.

XmlDocumentFragment

Представляет простой объект, полезный для операций вставки дерева.Represents a lightweight object that is useful for tree insert operations.

XmlDocumentType

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

XmlDocumentXPathExtensions
XmlElement

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

XmlEntity

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

XmlEntityReference

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

XmlException

Подробные сведения о последнем исключении.Returns detailed information about the last exception.

XmlImplementation

Определяет контекст набора объектов XmlDocument.Defines the context for a set of XmlDocument objects.

XmlLinkedNode

Получает узел, непосредственно предшествующий данному узлу или следующий сразу же за ним.Gets the node immediately preceding or following this node.

XmlNamedNodeMap

Представляет коллекцию узлов, доступ к которым можно получить по имени или по индексу.Represents a collection of nodes that can be accessed by name or index.

XmlNamespaceManager

Разрешает, добавляет и удаляет пространства имен из коллекции и обеспечивает управление областью для этих пространств имен.Resolves, adds, and removes namespaces to a collection and provides scope management for these namespaces.

XmlNameTable

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

XmlNode

Представляет отдельный узел в XML-документе.Represents a single node in the XML document.

XmlNodeChangedEventArgs

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

XmlNodeList

Представляет упорядоченную коллекцию узлов.Represents an ordered collection of nodes.

XmlNodeReader

Предоставляет средство чтения, обеспечивающее быстрый прямой доступ (без кэширования) к данным XML в классе XmlNode.Represents a reader that provides fast, non-cached forward only access to XML data in an XmlNode.

XmlNotation

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

XmlParserContext

Предоставляет все контекстные данные, необходимые объекту XmlReader для анализа фрагмента XML.Provides all the context information required by the XmlReader to parse an XML fragment.

XmlProcessingInstruction

Представляет инструкцию по обработке, которая определяется в XML для хранения сведений, относящихся к процессору, в тексте документа.Represents a processing instruction, which XML defines to keep processor-specific information in the text of the document.

XmlQualifiedName

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

XmlReader

Предоставляет средство чтения, обеспечивающее быстрый прямой доступ (без кэширования) к данным XML.Represents a reader that provides fast, noncached, forward-only access to XML data.

XmlReaderSettings

Задает набор функций, которые должны поддерживаться объектом XmlReader, создаваемым с помощью метода Create.Specifies a set of features to support on the XmlReader object created by the Create method.

XmlResolver

Разрешает внешние ресурсы XML, имена которых заданы с помощью URI.Resolves external XML resources named by a Uniform Resource Identifier (URI).

XmlSecureResolver

Позволяет защитить другую реализацию XmlResolver путем применения программы-оболочки к объекту XmlResolver и ограничения ресурсов, доступ к которым имеет доступ базовый объект XmlResolver.Helps to secure another implementation of XmlResolver by wrapping the XmlResolver object and restricting the resources that the underlying XmlResolver has access to.

XmlSignificantWhitespace

Представляет пробел между элементами разметки в смешанном узле содержимого или пробел в области xml:space= 'preserve'.Represents white space between markup in a mixed content node or white space within an xml:space= 'preserve' scope. Он также называется значащим пробелом.This is also referred to as significant white space.

XmlText

Представляет текстовое содержимое элемента или атрибута.Represents the text content of an element or attribute.

XmlTextReader

Предоставляет средство чтения, обеспечивающее быстрый прямой доступ (без кэширования) к данным XML.Represents a reader that provides fast, non-cached, forward-only access to XML data.

Начиная с .NET Framework версии 2.0 рекомендуется использовать класс XmlReader.Starting with the .NET Framework 2.0, we recommend that you use the XmlReader class instead.

XmlTextWriter

Представляет средство записи, предоставляющее способ быстрого прямого создания потоков (без кэширования) или файлов с данными XML, которые соответствуют рекомендациям консорциума W3C по языку XML версии 1.0 и пространств имен в XML.Represents a writer that provides a fast, non-cached, forward-only way of generating streams or files containing XML data that conforms to the W3C Extensible Markup Language (XML) 1.0 and the Namespaces in XML recommendations.

Начиная с .NET Framework версии 2.0 рекомендуется использовать класс XmlWriter.Starting with the .NET Framework 2.0, we recommend that you use the XmlWriter class instead.

XmlUrlResolver

Разрешает внешние ресурсы XML, имена которых заданы с помощью URI.Resolves external XML resources named by a Uniform Resource Identifier (URI).

XmlValidatingReader

Представляет средство чтения, обеспечивающее проверку определения DTD, схемы XDR и языка определения схемы XML.Represents a reader that provides document type definition (DTD), XML-Data Reduced (XDR) schema, and XML Schema definition language (XSD) validation.

Этот класс устарел.This class is obsolete. Начиная с .NET Framework версии 2.0, рекомендуется использовать класс XmlReaderSettings и метод Create для создания проверяющего средства чтения XML.Starting with the .NET Framework 2.0, we recommend that you use the XmlReaderSettings class and the Create method to create a validating XML reader.

XmlWhitespace

Представляет пробел в содержимом элемента.Represents white space in element content.

XmlWriter

Представляет средство записи, обеспечивающее быстрый прямой способ (без кэширования) создания потоков или файлов, содержащих XML-данные.Represents a writer that provides a fast, non-cached, forward-only way to generate streams or files that contain XML data.

XmlWriterSettings

Задает набор функций, которые должны поддерживаться объектом XmlWriter, создаваемым с помощью метода Create.Specifies a set of features to support on the XmlWriter object created by the Create method.

XmlXapResolver

Тип XmlXapResolver используется для разрешения ресурсов в пакете XAP приложения Silverlight.The XmlXapResolver type is used to resolve resources in the Silverlight application's XAP package.

Интерфейсы

IApplicationResourceStreamResolver

Представляет сопоставитель потока ресурсов приложения.Represents an application resource stream resolver.

IFragmentCapableXmlDictionaryWriter

Содержит свойства и методы, которые, при реализации с помощью XmlDictionaryWriter, позволяют обрабатывать фрагменты XML.Contains properties and methods that when implemented by a XmlDictionaryWriter, allows processing of XML fragments.

IHasXmlNode

Позволяет классу возвращать объект XmlNode из текущего контекста или позиции.Enables a class to return an XmlNode from the current context or position.

IStreamProvider

Представляет интерфейс, который может реализовываться классами, предоставляющими потоки.Represents an interface that can be implemented by classes providing streams.

IXmlBinaryReaderInitializer

Предоставляет методы для повторной инициализации средства чтения двоичных данных для считывания нового документа.Provides methods for reinitializing a binary reader to read a new document.

IXmlBinaryWriterInitializer

Указывает требования реализации для модулей записи двоичных данных XML, полученных из этого интерфейса.Specifies implementation requirements for XML binary writers that derive from this interface.

IXmlDictionary

interface, определяющий контракт, который должен реализовать словарь XML, чтобы быть использованным реализациями XmlDictionaryReader и XmlDictionaryWriter.An interface that defines the contract that an Xml dictionary must implement to be used by XmlDictionaryReader and XmlDictionaryWriter implementations.

IXmlLineInfo

Предоставляет интерфейс, позволяющий классу возвращать информацию о строке и положении в ней.Provides an interface to enable a class to return line and position information.

IXmlMtomReaderInitializer

Указывает требования реализации для MTOM-модулей чтения текста XML, полученных из этого интерфейса.Specifies implementation requirements for XML MTOM readers that derive from this interface.

IXmlMtomWriterInitializer

Будучи реализованным модулем записи MTOM, этот интерфейс обеспечивает инициализацию модуля записи MTOM.When implemented by an MTOM writer, this interface ensures initialization for an MTOM writer.

IXmlNamespaceResolver

Предоставляет доступ только для чтения к набору сопоставлений префиксов и пространств имен.Provides read-only access to a set of prefix and namespace mappings.

IXmlTextReaderInitializer

Указывает требования реализации для модулей чтения текста XML, полученных из этого интерфейса.Specifies implementation requirements for XML text readers that derive from this interface.

IXmlTextWriterInitializer

Указывает требования реализации для модулей записи текста XML, полученных из этого интерфейса.Specifies implementation requirements for XML text writers that derive from this interface.

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

ConformanceLevel

Задает количество проверок ввода-вывода, которые выполняют объекты XmlReader и XmlWriter.Specifies the amount of input or output checking that XmlReader and XmlWriter objects perform.

DtdProcessing

Задает параметры для обработки DTD. Перечисление DtdProcessing используется классом XmlReaderSettings.The DtdProcessing enumeration is used by the XmlReaderSettings class.

EntityHandling

Задает способ обработки сущностей средством XmlTextReader или XmlValidatingReader.Specifies how the XmlTextReader or XmlValidatingReader handle entities.

Formatting

Задает параметры форматирования для XmlTextWriter.Specifies formatting options for the XmlTextWriter.

NamespaceHandling

Указывает, нужно ли удалять дубликаты объявлений в объекте XmlWriter.Specifies whether to remove duplicate namespace declarations in the XmlWriter.

NewLineHandling

Задает способ обработки разрывов строк.Specifies how to handle line breaks.

ReadState

Задает состояние читателя.Specifies the state of the reader.

ValidationType

Указывает тип выполняемой проверки.Specifies the type of validation to perform.

WhitespaceHandling

Указывает способ обработки пробелов.Specifies how white space is handled.

WriteState

Задает состояние объекта XmlWriter.Specifies the state of the XmlWriter.

XmlDateTimeSerializationMode

Определяет способ обработки значения времени при преобразовании между строками и объектами DateTime.Specifies how to treat the time value when converting between string and DateTime.

XmlDictionaryReaderQuotaTypes

Перечисляет настраиваемые значения квоты для класса XmlDictionaryReaders.Enumerates the configurable quota values for XmlDictionaryReaders.

XmlNamespaceScope

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

XmlNodeChangedAction

Задает тип изменения узла.Specifies the type of node change.

XmlNodeOrder

Описывает документный порядок узла по отношению ко второму узлу.Describes the document order of a node compared to a second node.

XmlNodeType

Задает типа узла.Specifies the type of node.

XmlOutputMethod

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

XmlSpace

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

XmlTokenizedType

Представляет тип XML для строки. Это позволяет читать строку как определенный тип XML, например как тип раздела CDATA.This allows the string to be read as a particular XML type, for example a CDATA section type.

Делегаты

OnXmlDictionaryReaderClose

delegate для метода обратного вызова при закрытии модуля чтения.delegate for a callback method when closing the reader.

XmlNodeChangedEventHandler

Представляет метод, обрабатывающий события NodeChanged, NodeChanging, NodeInserted, NodeInserting, NodeRemoved и NodeRemoving.Represents the method that handles NodeChanged, NodeChanging, NodeInserted, NodeInserting, NodeRemoved and NodeRemoving events.

Комментарии

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

System.Xml Пространство имен поддерживает эти стандарты:The System.Xml namespace supports these standards:

См. в разделе отличия от спецификации W3C вариантов, в которых классы XML отличаются от рекомендаций W3C.See the section Differences from the W3C specs for two cases in which the XML classes differ from the W3C recommendations.

.NET Framework также предоставляет другие пространства имен для операций, связанных с XML.The .NET Framework also provides other namespaces for XML-related operations. Список, описания и ссылки, см. в разделе пространства имен System.Xml веб-страницы.For a list, descriptions, and links, see the System.Xml Namespaces webpage.

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

System.Xml.XmlReader И System.Xml.XmlWriter классы включают несколько асинхронных методов, основанных на.The System.Xml.XmlReader and System.Xml.XmlWriter classes include a number of asynchronous methods that are based on the . Эти методы можно определить по строке «Async» в конце их имена.These methods can be identified by the string "Async" at the end of their names. С помощью этих методов можно написать асинхронный код, которая похожа на синхронный код, и можно перенести существующий код синхронного в асинхронный код легко.With these methods, you can write asynchronous code that's similar to your synchronous code, and you can migrate your existing synchronous code to asynchronous code easily.

  • Использовать асинхронные методы в приложениях при наличии потока задержек в сети.Use the asynchronous methods in apps where there is significant network stream latency. Избегайте использования асинхронных интерфейсов API для потока памяти или операций чтения и записи потока в локальный файл.Avoid using the asynchronous APIs for memory stream or local file stream read/write operations. Входной поток, XmlTextReader, и XmlTextWriter должен поддерживать также асинхронных операций.The input stream, XmlTextReader, and XmlTextWriter should support asynchronous operations as well. В противном случае потоки будут по-прежнему блокируется операций ввода-вывода.Otherwise, threads will still be blocked by I/O operations.

  • Мы не рекомендуем смешивание синхронные и асинхронные вызовы, поскольку возможно, пропущено await ключевое слово или использования синхронных API, где необходима асинхронной.We don't recommend mixing synchronous and asynchronous function calls, because you might forget to use the await keyword or use a synchronous API where an asynchronous one is necessary.

  • Не устанавливайте XmlReaderSettings.Async или XmlWriterSettings.Async флаг true Если вы не собираетесь использовать асинхронный метод.Do not set the XmlReaderSettings.Async or XmlWriterSettings.Async flag to true if you don't intend to use an asynchronous method.

  • Если вы забыли указать await ключевое слово при вызове асинхронного метода, результаты являются недетерминистическими: Вы можете получить ожидаемый результат или исключение.If you forget to specify the await keyword when you call an asynchronous method, the results are non-deterministic: You might receive the result you expected or an exception.

  • Когда XmlReader объекта считывает большой текстовый узел, он может кэшировать только частичное текстовое значение и вернуть текстовый узел, поэтому получение XmlReader.Value свойство может быть заблокирован при выполнении операций ввода-вывода.When an XmlReader object is reading a large text node, it might cache only a partial text value and return the text node, so retrieving the XmlReader.Value property might be blocked by an I/O operation. Используйте XmlReader.GetValueAsync метод, чтобы получить текстовое значение в асинхронном режиме, либо используйте XmlReader.ReadValueChunkAsync метод для чтения большого текстового блока в блоки.Use the XmlReader.GetValueAsync method to get the text value in asynchronous mode, or use the XmlReader.ReadValueChunkAsync method to read a large text block in chunks.

  • При использовании XmlWriter , вызовите XmlWriter.FlushAsync метод перед вызовом XmlWriter.Close для предотвращения блокировки операцию ввода-вывода.When you use an XmlWriter object, call the XmlWriter.FlushAsync method before calling XmlWriter.Close to avoid blocking an I/O operation.

Отличия от спецификации W3CDifferences from the W3C specs

В двух случаях, которые включают ограничения компонентов схемы группы моделей System.Xml пространство имен отличается от рекомендаций W3C.In two cases that involve constraints on model group schema components, the System.Xml namespace differs from the W3C recommendations.

Согласованность в объявления элементов:Consistency in element declarations:

В некоторых случаях, когда используются группы подстановки System.Xml реализации не удовлетворяет ограничению «ограничение компонента схемы: Объявления элементов согласованы, «который описан в ограничения компонентов схемы группы моделей разделе спецификации W3C.In some cases, when substitution groups are used, the System.Xml implementation does not satisfy the "Schema Component Constraint: Element Declarations Consistent," which is described in the Constraints on Model Group Schema Components section of the W3C spec.

Например следующая схема включает элементы, которые имеют одинаковые имена, но используются различные типы в той же модели содержимого, а группы подстановки.For example, the following schema includes elements that have the same name but different types in the same content model, and substitution groups are used. Это может вызвать ошибку, но System.Xml компилирует и проверяет схему без ошибок.This should cause an error, but System.Xml compiles and validates the schema without errors.

<?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 содержит последовательность элементов.In this schema, type t3 contains a sequence of elements. По причине подстановки ссылка из последовательности на элемент e1 может привести к образованию либо элемента e1 типа t1, либо элемента e2 типа t2.Because of the substitution, the reference to element e1 from the sequence can result either in element e1 of type t1 or in element e2 of type t2. В последнем случае приведет к из двух последовательных e2 элементов, где он типа t2 , а другой — типа xs:int.The latter case would result in a sequence of two e2 elements, where one is of type t2 and the other is of type xs:int.

Однозначное соответствие примитивов:Unique particle attribution:

При следующих условиях System.Xml реализации не удовлетворяет ограничению «ограничение компонента схемы: Однозначное соответствие примитивов, «который описан в ограничения компонентов схемы группы моделей разделе спецификации W3C.Under the following conditions, the System.Xml implementation does not satisfy the "Schema Component Constraint: Unique Particle Attribution," which is described in the Constraints on Model Group Schema Components section of the W3C spec.

  • Один из элементов в группе ссылается на другой элемент.One of the elements in the group references another element.

  • Элемент, на который указывает ссылка, является головным элементом группы подстановки.The referenced element is a head element of a substitution group.

  • Группа подстановки содержит элемент, имеющий то же имя, что один из элементов в группе.The substitution group contains an element that has the same name as one of the elements in the group.

  • Кратности элемента, который ссылается на головной элемент группы подстановки и элемент с тем же именем, как элемент группы подстановки не зафиксировано (minOccurs < maxOccurs).The cardinality of the element that references the substitution group head element and the element with the same name as a substitution group element is not fixed (minOccurs < maxOccurs).

  • Определение элемента, который ссылается на группу подстановки, приведено раньше определения элемента с тем же именем, как элемент группы подстановки.The definition of the element that references the substitution group precedes the definition of the element with the same name as a substitution group element.

Например, в нижеприведенной схеме модель содержимого неоднозначна и может привести к возникновению ошибки компиляции, но System.Xml компилирует схему без ошибок.For example, in the schema below the content model is ambiguous and should cause a compilation error, but System.Xml compiles the schema without errors.

<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 будет создано исключение.If you try to validate the following XML against the schema above, the validation will fail with the following message: "The element 'e3' has invalid child element 'e2'." and an XmlSchemaValidationException exception will be thrown.

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

Чтобы обойти эту проблему, можно поменяйте местами объявления элементов из документа XSD.To work around this problem, you can swap element declarations in the XSD document. Например:For example:

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

становитсяbecomes this:

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

Вот еще один пример той же проблемы:Here's another example of the same issue:

<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.»If you try to validate the following XML against the schema above, the validation will fail with the following exception: "Unhandled Exception: System.Xml.Schema.XmlSchemaValidationException: The 'e2' el element is invalid - The value 'abc' is invalid according to its datatype 'http://www.w3.org/2001/XMLSchema:int' - The string 'abc' is not a valid Int32 value."

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

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

Типы и члены в System.Xml зависят от пространства имен систему безопасности .NET.The types and members in the System.Xml namespace rely on the .NET security system. В следующих разделах рассматриваются вопросы безопасности, относящиеся к XML-технологиями.The following sections discuss security issues that are specific to XML technologies.

Также Обратите внимание, что при использовании System.Xml типов и членов, если XML содержит данные, имеющие могут повлиять на конфиденциальность, необходимо реализовать приложение способом, оберегающим конфиденциальность конечных пользователей.Also note that when you use the System.Xml types and members, if the XML contains data that has potential privacy implications, you need to implement your app in a way that respects your end users' privacy.

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

Несколько XML-технологий позволяют получать в ходе обработки другие документы.Several XML technologies have the ability to retrieve other documents during processing. Например, определение типа документа (DTD) может находиться в документе, для которого выполняется синтаксический анализ.For example, a document type definition (DTD) can reside in the document being parsed. DTD может также находиться во внешнем документе, на который ссылается анализируемый документ.The DTD can also live in an external document that is referenced by the document being parsed. Язык XSD и технологии XSLT также позволяют включать сведения из других файлов.The XML Schema definition language (XSD) and XSLT technologies also have the ability to include information from other files. Эти внешние ресурсы могут быть связаны некоторые проблемы безопасности.These external resources can present some security concerns. Например вы захотите убедиться, что приложение извлекает файлы только из надежных сайтов и что файл он извлекает не содержит вредоносных данных.For example, you'll want to ensure that your app retrieves files only from trusted sites, and that the file it retrieves doesn't contain malicious data.

XmlUrlResolver Класс используется для загрузки XML-документов, а также для разрешения внешних ресурсов, таких как сущности, DTD или схемы и импорта или включения директив.The XmlUrlResolver class is used to load XML documents and to resolve external resources such as entities, DTDs, or schemas, and import or include directives.

Можно переопределить этот класс и укажите XmlResolver объект для использования.You can override this class and specify the XmlResolver object to use. Использовать класс XmlSecureResolver рекомендуется, если вам необходимо открыть ресурс, которым вы не управляете или к которому нет доверия.Use the XmlSecureResolver class if you need to open a resource that you do not control, or that is untrusted. Класс XmlSecureResolver упаковывает объект XmlResolver и позволяет ограничить ресурсы, доступные для базового объекта XmlResolver.The XmlSecureResolver wraps an XmlResolver and allows you to restrict the resources that the underlying XmlResolver has access to.

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

Следующие сценарии считаются менее уязвимыми для атак типа «отказ в обслуживании», так как классы System.Xml обеспечивают средства защиты от таких атак.The following scenarios are considered to be less vulnerable to denial of service attacks because the System.Xml classes provide a means of protection from such attacks.

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

  • Синтаксический анализ двоичных XML-данных, если двоичных XML-данных был создан в Microsoft SQL Server.Parsing binary XML data if the binary XML data was generated by Microsoft SQL Server.

  • Запись XML-документов и фрагментов из источников данных в файловую систему, потоки, TextWriter или StringBuilder.Writing XML documents and fragments from data sources to the file system, streams, a TextWriter, or a StringBuilder.

  • Загрузка документов в объект DOM, если используется объект XmlReader, а свойство XmlReaderSettings.DtdProcessing имеет значение DtdProcessing.Prohibit.Loading documents into the Document Object Model (DOM) object if you are using an XmlReader object and XmlReaderSettings.DtdProcessing set to DtdProcessing.Prohibit.

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

Приведенные ниже сценарии использовать не рекомендуются, если есть угроза атак типа «отказ в обслуживании» или при работе в ненадежной среде.The following scenarios are not recommended if you are concerned about denial of service attacks, or if you are working in an untrusted environment.

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

  • Обработка схем.Schema processing. Сюда относится добавление в коллекцию схем схемы без доверия, компиляция схемы без доверия и проверка с использованием схемы без доверия.This includes adding an untrusted schema to the schema collection, compiling an untrusted schema, and validating by using an untrusted schema.

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

  • Синтаксический анализ произвольного потока предоставленных пользователем двоичных XML-данных.Parsing any arbitrary stream of user supplied binary XML data.

  • DOM-операции, например запросы, изменение, перемещение поддеревьев между документами и сохранение объектов DOM.DOM operations such as querying, editing, moving sub-trees between documents, and saving DOM objects.

Если вы беспокоитесь о отказ в обслуживании проблемы или вы работаете с ненадежными источниками, не включайте обработку DTD.If you are concerned about denial of service issues or if you are dealing with untrusted sources, do not enable DTD processing. Эта функция отключена по умолчанию на XmlReader объекты, которые XmlReader.Create методом.This is disabled by default on XmlReader objects that the XmlReader.Create method creates.

Примечание

Класс XmlTextReader по умолчанию разрешает обработку DTD.The XmlTextReader allows DTD processing by default. Чтобы отключить эту функцию, воспользуйтесь свойством XmlTextReader.DtdProcessing.Use the XmlTextReader.DtdProcessing property to disable this feature.

Если обработка DTD включена, можно использовать XmlSecureResolver класс для ограничения ресурсов, XmlReader доступны.If you have DTD processing enabled, you can use the XmlSecureResolver class to restrict the resources that the XmlReader can access. Можно также разрабатывать приложения, чтобы обработка XML — это память, и время, выделяемое.You can also design your app so that the XML processing is memory and time constrained. Например можно настроить пределы времени ожидания в приложении ASP.NET.For example, you can configure timeout limits in your ASP.NET app.

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

XML-документы могут содержать ссылки на другие файлы, поэтому трудно определить, сколько вычислительных ресурсов потребуется для синтаксического анализа XML-документа.Because XML documents can include references to other files, it is difficult to determine how much processing power is required to parse an XML document. Например, XML-документы могут содержать DTD.For example, XML documents can include a DTD. Если DTD содержит сущности или сложные модели содержимого, то для синтаксического анализа документа может потребоваться слишком много времени.If the DTD contains nested entities or complex content models, it could take an excessive amount of time to parse the document.

При использовании XmlReader можно ограничить размер документа, который может быть подвергнут синтаксическому анализу, задав свойство XmlReaderSettings.MaxCharactersInDocument.When using XmlReader, you can limit the size of the document that can be parsed by setting the XmlReaderSettings.MaxCharactersInDocument property. Можно ограничить число символов, появляющихся в результате раскрытия сущностей, задав свойство XmlReaderSettings.MaxCharactersFromEntities.You can limit the number of characters that result from expanding entities by setting the XmlReaderSettings.MaxCharactersFromEntities property. Примеры настройки этих свойств см. в соответствующих разделах справки.See the appropriate reference topics for examples of setting these properties.

Технологии XSD и XSLT имеют дополнительные возможности, которые могут влиять на производительность при обработке.The XSD and XSLT technologies have additional capabilities that can affect processing performance. Например, можно построить схему XML, для обработки которой даже при сравнительно небольшом размере документа потребуется значительное время.For example, it is possible to construct an XML schema that requires a substantial amount of time to process when evaluated over a relatively small document. Кроме того, можно внедрять блоки скриптов в таблицу стилей XSLT.It is also possible to embed script blocks within an XSLT style sheet. В обоих случаях существует потенциальная угроза безопасности к приложению.Both cases pose a potential security threat to your app.

При создании приложения, использующего XslCompiledTransform класса, следует иметь в виду следующие элементы и их последствиях:When creating an app that uses the XslCompiledTransform class, you should be aware of the following items and their implications:

  • Скрипты XSLT отключены по умолчанию.XSLT scripting is disabled by default. Скрипты XSLT следует включать только при необходимости в поддержке скриптов и при работе в полностью доверенной среде.XSLT scripting should be enabled only if you require script support and you are working in a fully trusted environment.

  • Функция XSLT document() отключена по умолчанию.The XSLT document() function is disabled by default. Если функция document() включена, ограничьте ресурсы, к которым можно получить доступ путем передачи объекта XmlSecureResolver методу XslCompiledTransform.Transform.If you enable the document() function, restrict the resources that can be accessed by passing an XmlSecureResolver object to the XslCompiledTransform.Transform method.

  • Объекты расширения по умолчанию включены.Extension objects are enabled by default. Если методу XsltArgumentList передается объект XslCompiledTransform.Transform, содержащий объекты расширения, то используются объекты расширения.If an XsltArgumentList object that contains extension objects is passed to the XslCompiledTransform.Transform method, the extension objects are used.

  • Таблицы стилей XSLT могут содержать ссылки на другие файлы и внедренные блоки скриптов.XSLT style sheets can include references to other files and embedded script blocks. Этим может воспользоваться злонамеренный пользователь: он может передать такие данные или таблицы стилей, которые при выполнении будут задействовать все доступные ресурсы компьютера.A malicious user can exploit this by supplying you with data or style sheets that, when executed, can cause your system to process until the computer runs low on resources.

  • Приложения XSLT, работающие в смешанной доверенной среде может привести подделке таблицы стилей.XSLT apps that run in a mixed trust environment can result in style sheet spoofing. Например, злонамеренный пользователь может загрузить объект с вредоносной таблицей стилей и передать ее другому пользователю, который впоследствии вызовет метод XslCompiledTransform.Transform и выполнит преобразование.For example, a malicious user can load an object with a harmful style sheet and hand it off to another user who subsequently calls the XslCompiledTransform.Transform method and executes the transformation.

Чтобы избежать этих проблем безопасности, не следует включатьскрипты или функцию document(), если таблица стилей поступает не из надежного источника, а также не следует принимать объекты XslCompiledTransform, таблицы стилей XSLT или исходные XML-данные из ненадежных источников.These security issues can be mitigated by not enabling scripting or the document() function unless the style sheet comes from a trusted source, and by not accepting XslCompiledTransform objects, XSLT style sheets, or XML source data from an untrusted source.

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

Исключения, вызванные компонентами нижнего уровня могут содержать сведения о пути, которые не требуется доступ к приложению.Exceptions thrown by lower level components can disclose path information that you do not want exposed to the app. Приложения должны перехватывать исключения и обрабатывать их соответствующим образом.Your apps must catch exceptions and process them appropriately.

Дополнительно