System.Xml Namespace

Fornece suporte baseado em padrões para processamento de XML. Provides standards-based support for processing XML.

Classes

NameTable

Implementa um XmlNameTable single-threaded.Implements a single-threaded XmlNameTable.

UniqueId

Um identificador exclusivo otimizado para Guids.A unique identifier optimized for Guids.

XmlAttribute

Representa um atributo.Represents an attribute. Os valores válidos e padrão do atributo são definidos em um DTD (definição de tipo de documento) ou esquema.Valid and default values for the attribute are defined in a document type definition (DTD) or schema.

XmlAttributeCollection

Representa uma coleção de atributos que podem ser acessados por nome ou índice.Represents a collection of attributes that can be accessed by name or index.

XmlBinaryReaderSession

Permite que cadeias de caracteres otimizadas sejam gerenciadas de uma forma dinâmica.Enables optimized strings to be managed in a dynamic way.

XmlBinaryWriterSession

Permite usar um dicionário dinâmico para compactar cadeias de caracteres comuns que aparecem em uma mensagem e manter o estado.Enables using a dynamic dictionary to compress common strings that appear in a message and maintain state.

XmlCDataSection

Representa uma seção CDATA.Represents a CDATA section.

XmlCharacterData

Fornece métodos de manipulação que são usados por várias classes.Provides text manipulation methods that are used by several classes.

XmlComment

Representa o conteúdo de um comentário XML.Represents the content of an XML comment.

XmlConvert

Codifica e decodifica nomes XML e fornece métodos para converter entre tipos Common Language Runtime e tipos XSD (linguagem de definição de esquema XML).Encodes and decodes XML names, and provides methods for converting between common language runtime types and XML Schema definition language (XSD) types. Ao converter tipos de dados, os valores retornados independem da localidade.When converting data types, the values returned are locale-independent.

XmlDataDocument

Permite que os dados estruturados sejam armazenados, recuperados e manipulados por meio de um DataSet relacional.Allows structured data to be stored, retrieved, and manipulated through a relational DataSet.

XmlDeclaration

Representa o nó de declaração XML <?xml version='1.0'...?>.Represents the XML declaration node <?xml version='1.0'...?>.

XmlDictionary

Implementa um dicionário usado para otimizar as implementações do leitor/gravador de XML do WCF (Windows Communication Foundation).Implements a dictionary used to optimize Windows Communication Foundation (WCF)'s XML reader/writer implementations.

XmlDictionaryReader

Uma classe abstract que o WCF (Windows Communication Foundation) deriva do XmlReader para realizar serialização e desserialização.An abstract class that the Windows Communication Foundation (WCF) derives from XmlReader to do serialization and deserialization.

XmlDictionaryReaderQuotas

Contém valores de cota configuráveis para XmlDictionaryReaders.Contains configurable quota values for XmlDictionaryReaders.

XmlDictionaryString

Representa uma entrada armazenada em um XmlDictionary.Represents an entry stored in a XmlDictionary.

XmlDictionaryWriter

Representa uma classe abstrata que o WCF (Windows Communication Foundation) deriva de XmlWriter para realizar serialização e desserialização.Represents an abstract class that Windows Communication Foundation (WCF) derives from XmlWriter to do serialization and deserialization.

XmlDocument

Representa um documento XML.Represents an XML document. Você pode usar essa classe para carregar, validar, editar, adicionar e posicionar o XML em um documento.You can use this class to load, validate, edit, add, and position XML in a document.

XmlDocumentFragment

Representa um objeto leve que é útil para operações de inserção de árvore.Represents a lightweight object that is useful for tree insert operations.

XmlDocumentType

Representa a declaração de tipo do documento.Represents the document type declaration.

XmlDocumentXPathExtensions

Fornece métodos de extensão para o XmlDocument e XmlNode para a navegação de documentos.Provides extension methods for the XmlDocument and XmlNode for document navigation.

XmlElement

Representa um elemento.Represents an element.

XmlEntity

Representa uma declaração de entidade, como <!ENTITY... >.Represents an entity declaration, such as <!ENTITY... >.

XmlEntityReference

Representa um nó de referência de entidade.Represents an entity reference node.

XmlException

Retorna informações detalhadas sobre a última exceção.Returns detailed information about the last exception.

XmlImplementation

Define o contexto de um conjunto de objetos XmlDocument.Defines the context for a set of XmlDocument objects.

XmlLinkedNode

Obtém o nó imediatamente anterior ou posterior a este nó.Gets the node immediately preceding or following this node.

XmlNamedNodeMap

Representa uma coleção de nós que podem ser acessados por nome ou índice.Represents a collection of nodes that can be accessed by name or index.

XmlNamespaceManager

Resolve, adiciona e remove namespaces de uma coleção e fornece gerenciamento de escopo para esses namespaces.Resolves, adds, and removes namespaces to a collection and provides scope management for these namespaces.

XmlNameTable

Tabela de objetos atomizados de cadeia de caracteres.Table of atomized string objects.

XmlNode

Representa um único nó no mapa do documento XML.Represents a single node in the XML document.

XmlNodeChangedEventArgs

Fornece dados para os eventos NodeChanged, NodeChanging, NodeInserted, NodeInserting, NodeRemoved e NodeRemoving.Provides data for the NodeChanged, NodeChanging, NodeInserted, NodeInserting, NodeRemoved and NodeRemoving events.

XmlNodeList

Representa uma coleção ordenada de nós.Represents an ordered collection of nodes.

XmlNodeReader

Representa um leitor que fornece acesso rápido não armazenado em cache e somente de encaminhamento aos dados XML em um XmlNode.Represents a reader that provides fast, non-cached forward only access to XML data in an XmlNode.

XmlNotation

Representa uma declaração de notação, como <!NOTATION... >.Represents a notation declaration, such as <!NOTATION... >.

XmlParserContext

Fornece todas as informações de contexto obrigatórias para o XmlReader para analisar um fragmento XML.Provides all the context information required by the XmlReader to parse an XML fragment.

XmlProcessingInstruction

Representa uma instrução de processamento, a qual é definida pelo XML para manter informações específicas do processador no texto do documento.Represents a processing instruction, which XML defines to keep processor-specific information in the text of the document.

XmlQualifiedName

Representa um nome qualificado de XML.Represents an XML qualified name.

XmlReader

Representa um leitor que fornece acesso rápido não armazenado em cache e somente de encaminhamento aos dados XML.Represents a reader that provides fast, noncached, forward-only access to XML data.

XmlReaderSettings

Especifica um conjunto de recursos para dar suporte ao objeto XmlReader criado pelo método Create.Specifies a set of features to support on the XmlReader object created by the Create method.

XmlResolver

Resolve recursos XML externos nomeados por um URI (Uniform Resource Identifier).Resolves external XML resources named by a Uniform Resource Identifier (URI).

XmlSecureResolver

Ajuda a proteger outra implementação de XmlResolver encapsulando o objeto XmlResolver e restringindo os recursos aos quais o XmlResolver subjacente tem acesso.Helps to secure another implementation of XmlResolver by wrapping the XmlResolver object and restricting the resources that the underlying XmlResolver has access to.

XmlSignificantWhitespace

Representa o espaço em branco entre a marcação em um nó de conteúdo misto ou espaço em branco em um escopo xml:space= 'preserve'.Represents white space between markup in a mixed content node or white space within an xml:space= 'preserve' scope. Isso também é chamado de espaço em branco significativo.This is also referred to as significant white space.

XmlText

Representa o conteúdo de texto de um elemento ou atributo.Represents the text content of an element or attribute.

XmlTextReader

Representa um leitor que fornece acesso rápido não armazenado em cache e somente de encaminhamento aos dados XML.Represents a reader that provides fast, non-cached, forward-only access to XML data.

A partir do .NET Framework 2.0, recomendamos o uso da classe XmlReader.Starting with the .NET Framework 2.0, we recommend that you use the XmlReader class instead.

XmlTextWriter

Representa um gravador que fornece um modo rápido não armazenado em cache e somente de encaminhamento para gerar fluxos ou arquivos que contém dados XML em conformidade com o W3C Extensible Markup Language (XML) 1.0 e os Namespaces nas recomendações de 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.

A partir do .NET Framework 2.0, recomendamos o uso da classe XmlWriter.Starting with the .NET Framework 2.0, we recommend that you use the XmlWriter class instead.

XmlUrlResolver

Resolve recursos XML externos nomeados por um URI (Uniform Resource Identifier).Resolves external XML resources named by a Uniform Resource Identifier (URI).

XmlValidatingReader

Representa um leitor que fornece a DTD (definição de tipo de documento), o esquema XDR (dados XML reduzidos) e a validação de XSD (linguagem de definição de esquema XML).Represents a reader that provides document type definition (DTD), XML-Data Reduced (XDR) schema, and XML Schema definition language (XSD) validation.

Essa classe está obsoleta.This class is obsolete. A partir do .NET Framework 2.0, recomendamos que você use a classe XmlReaderSettings e o método Create para criar um leitor de XML de validação.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

Representa o espaço em branco no conteúdo do elemento.Represents white space in element content.

XmlWriter

Representa um gravador que fornece uma maneira rápida, não armazenada em cache e somente de encaminhamento de gerar fluxos ou arquivos que contém dados XML.Represents a writer that provides a fast, non-cached, forward-only way to generate streams or files that contain XML data.

XmlWriterSettings

Especifica um conjunto de recursos para dar suporte ao objeto XmlWriter criado pelo método Create.Specifies a set of features to support on the XmlWriter object created by the Create method.

XmlXapResolver

O tipo XmlXapResolver é usado para resolver recursos no pacote XAP do aplicativo Silverlight.The XmlXapResolver type is used to resolve resources in the Silverlight application's XAP package.

Interfaces

IApplicationResourceStreamResolver

Representa um resolvedor de fluxo de recurso do aplicativo.Represents an application resource stream resolver.

IFragmentCapableXmlDictionaryWriter

Contém propriedades e métodos que, quando implementados por um XmlDictionaryWriter, permitem o processamento de fragmentos XML.Contains properties and methods that when implemented by a XmlDictionaryWriter, allows processing of XML fragments.

IHasXmlNode

Permite que uma classe retorne um XmlNode do contexto ou posição atual.Enables a class to return an XmlNode from the current context or position.

IStreamProvider

Representa uma interface que pode ser implementada pelas classes que fornecem fluxos.Represents an interface that can be implemented by classes providing streams.

IXmlBinaryReaderInitializer

Fornece métodos para reinicializar um leitor binário para ler um documento novo.Provides methods for reinitializing a binary reader to read a new document.

IXmlBinaryWriterInitializer

Especifica os requisitos de implementação para gravadores binários XML que derivam desta interface.Specifies implementation requirements for XML binary writers that derive from this interface.

IXmlDictionary

Um interface que define o contrato que um dicionário XML deve implementar para ser usado por implementações XmlDictionaryReader e XmlDictionaryWriter.An interface that defines the contract that an Xml dictionary must implement to be used by XmlDictionaryReader and XmlDictionaryWriter implementations.

IXmlLineInfo

Fornece uma interface para permitir que uma classe retorne informações de linha e posição.Provides an interface to enable a class to return line and position information.

IXmlMtomReaderInitializer

Especifica os requisitos de implementação para os leitores de MTOM XML que derivam dessa interface.Specifies implementation requirements for XML MTOM readers that derive from this interface.

IXmlMtomWriterInitializer

Quando implementado por um gravador MTOM, essa interface garante a inicialização para um gravador MTOM.When implemented by an MTOM writer, this interface ensures initialization for an MTOM writer.

IXmlNamespaceResolver

Fornece acesso somente leitura a um conjunto de mapeamentos de prefixo e namespace.Provides read-only access to a set of prefix and namespace mappings.

IXmlTextReaderInitializer

Especifica os requisitos de implementação para leitores de texto XML que derivam desta interface.Specifies implementation requirements for XML text readers that derive from this interface.

IXmlTextWriterInitializer

Especifica os requisitos de implementação para gravadores de texto XML que derivam desta interface.Specifies implementation requirements for XML text writers that derive from this interface.

Enumerações

ConformanceLevel

Especifica a quantidade de verificação de entrada ou saída que os objetos XmlReader e XmlWriter executam.Specifies the amount of input or output checking that XmlReader and XmlWriter objects perform.

DtdProcessing

Especifica as opções para processar os DTDs.Specifies the options for processing DTDs. A enumeração DtdProcessing é usada pela classe XmlReaderSettings.The DtdProcessing enumeration is used by the XmlReaderSettings class.

EntityHandling

Especifica como o XmlTextReader ou XmlValidatingReader trata entidades.Specifies how the XmlTextReader or XmlValidatingReader handle entities.

Formatting

Especifica opções de formatação para o XmlTextWriter.Specifies formatting options for the XmlTextWriter.

NamespaceHandling

Especifica se as declarações de namespace duplicados no XmlWriter devem ser removidas.Specifies whether to remove duplicate namespace declarations in the XmlWriter.

NewLineHandling

Especifica como lidar com quebras de linha.Specifies how to handle line breaks.

ReadState

Especifica o estado do leitor.Specifies the state of the reader.

ValidationType

Especifica o tipo de validação a ser executada.Specifies the type of validation to perform.

WhitespaceHandling

Especifica como o espaço em branco é tratado.Specifies how white space is handled.

WriteState

Especifica o estado do XmlWriter.Specifies the state of the XmlWriter.

XmlDateTimeSerializationMode

Especifica como tratar o valor temporal ao converter entre cadeias de caracteres e DateTime.Specifies how to treat the time value when converting between string and DateTime.

XmlDictionaryReaderQuotaTypes

Enumera os valores de cota configuráveis para XmlDictionaryReaders.Enumerates the configurable quota values for XmlDictionaryReaders.

XmlNamespaceScope

Define o escopo de namespace.Defines the namespace scope.

XmlNodeChangedAction

Especifica o tipo da alteração de nó.Specifies the type of node change.

XmlNodeOrder

Descreve a ordem de um nó no documento em comparação a um segundo nó.Describes the document order of a node compared to a second node.

XmlNodeType

Especifica o tipo de nó.Specifies the type of node.

XmlOutputMethod

Especifica o método usado para serializar a saída XmlWriter.Specifies the method used to serialize the XmlWriter output.

XmlSpace

Especifica o escopo xml:space atual.Specifies the current xml:space scope.

XmlTokenizedType

Representa o tipo XML para a cadeia de caracteres.Represents the XML type for the string. Isso permite que a cadeia de caracteres seja lida como um tipo XML específico, por exemplo, um tipo de seção CDATA.This allows the string to be read as a particular XML type, for example a CDATA section type.

Delegados

OnXmlDictionaryReaderClose

delegate para um método de retorno de chamada ao fechar o leitor.delegate for a callback method when closing the reader.

XmlNodeChangedEventHandler

Representa o método que manipula eventos NodeChanged, NodeChanging, NodeInserted, NodeInserting, NodeRemoved e NodeRemoving.Represents the method that handles NodeChanged, NodeChanging, NodeInserted, NodeInserting, NodeRemoved and NodeRemoving events.

Comentários

Padrões com suporteSupported standards

O System.Xml namespace oferece suporte a esses padrões:The System.Xml namespace supports these standards:

Consulte a seção diferenças das especificações do W3C para dois casos em que as classes XML diferem das recomendações do W3C.See the section Differences from the W3C specs for two cases in which the XML classes differ from the W3C recommendations.

O .NET também fornece outros namespaces para operações relacionadas a XML..NET also provides other namespaces for XML-related operations. Para obter uma lista, descrições e links, consulte System.Xml namespaces.For a list, descriptions, and links, see System.Xml Namespaces.

Processamento de XML de forma assíncronaProcessing XML asynchronously

As System.Xml.XmlReader System.Xml.XmlWriter classes e incluem vários métodos assíncronos baseados no modelo de programação assíncrona.The System.Xml.XmlReader and System.Xml.XmlWriter classes include a number of asynchronous methods that are based on the asynchronous programming model. Esses métodos podem ser identificados pela cadeia de caracteres "Async" no final de seus nomes.These methods can be identified by the string "Async" at the end of their names. Com esses métodos, você pode escrever código assíncrono semelhante ao seu código síncrono, e você pode migrar seu código síncrono existente para um código assíncrono com facilidade.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 os métodos assíncronos em aplicativos em que há uma latência significativa de fluxo de rede.Use the asynchronous methods in apps where there is significant network stream latency. Evite usar as APIs assíncronas para fluxo de memória ou operações de leitura/gravação de fluxo de arquivo local.Avoid using the asynchronous APIs for memory stream or local file stream read/write operations. O fluxo de entrada, o XmlTextReader e o XmlTextWriter também devem oferecer suporte a operações assíncronas.The input stream, XmlTextReader, and XmlTextWriter should support asynchronous operations as well. Caso contrário, os threads ainda serão bloqueados pelas operações de e/s.Otherwise, threads will still be blocked by I/O operations.

  • Não recomendamos misturar chamadas de função síncronas e assíncronas, pois você pode se esquecer de usar a await palavra-chave ou usar uma API síncrona em que uma delas é necessária.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.

  • Não defina o XmlReaderSettings.Async sinalizador ou XmlWriterSettings.Async como true se você não pretender usar um método assíncrono.Do not set the XmlReaderSettings.Async or XmlWriterSettings.Async flag to true if you don't intend to use an asynchronous method.

  • Se você se esquecer de especificar a await palavra-chave ao chamar um método assíncrono, os resultados serão não determinísticos: você poderá receber o resultado esperado ou uma exceção.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.

  • Quando um XmlReader objeto está lendo um nó de texto grande, ele pode armazenar em cache apenas um valor de texto parcial e retornar o nó de texto, de modo que a recuperação da XmlReader.Value Propriedade possa ser bloqueada por uma operação de e/s.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. Use o XmlReader.GetValueAsync método para obter o valor de texto no modo assíncrono ou use o XmlReader.ReadValueChunkAsync método para ler um bloco de texto grande em partes.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.

  • Ao usar um XmlWriter objeto, chame o XmlWriter.FlushAsync método antes de chamar XmlWriter.Close para evitar o bloqueio de uma operação de e/s.When you use an XmlWriter object, call the XmlWriter.FlushAsync method before calling XmlWriter.Close to avoid blocking an I/O operation.

Diferenças das especificações do W3CDifferences from the W3C specs

Em dois casos que envolvem restrições em componentes de esquema do grupo de modelos, o System.Xml namespace difere das recomendações do W3C.In two cases that involve constraints on model group schema components, the System.Xml namespace differs from the W3C recommendations.

Consistência em declarações de elemento:Consistency in element declarations:

Em alguns casos, quando grupos de substituição são usados, a System.Xml implementação não satisfaz a "restrição de componente de esquema: declarações de elemento consistentes", que é descrita na seção restrições em componentes de esquema de grupo de modelos da especificação 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.

Por exemplo, o esquema a seguir inclui elementos que têm o mesmo nome, mas tipos diferentes no mesmo modelo de conteúdo, e grupos de substituição são usados.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. Isso deve causar um erro, mas System.Xml compila e valida o esquema sem erros.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>

Neste esquema, o tipo t3 contém uma sequência de elementos.In this schema, type t3 contains a sequence of elements. Devido a substituição, a referência ao elemento e1 a sequência pode resultar no elemento e1 de tipo t1 ou elemento e2 de tipo 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. O último caso resultaria em uma sequência de dois e2 elementos, em que um é do tipo t2 e o outro é do tipo 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.

Atribuição de partícula exclusiva:Unique particle attribution:

Sob as condições a seguir, a System.Xml implementação não satisfaz a "restrição de componente de esquema: atribuição de partícula exclusiva", que é descrita na seção restrições em componentes de esquema de grupo de modelos da especificação 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.

  • Um dos elementos no grupo referencia outro elemento.One of the elements in the group references another element.

  • O elemento referenciado é um elemento principal de um grupo de substituição.The referenced element is a head element of a substitution group.

  • O grupo de substituição contém um elemento que tem o mesmo nome de um dos elementos no grupo.The substitution group contains an element that has the same name as one of the elements in the group.

  • A cardinalidade do elemento que faz referência ao elemento de cabeçalho do grupo de substituição e o elemento com o mesmo nome que um elemento de grupo de substituição não é fixo (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).

  • A definição do elemento que faz referência ao grupo de substituição precede a definição do elemento com o mesmo nome de um elemento de grupo de substituição.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.

Por exemplo, no esquema abaixo do modelo de conteúdo é ambíguo e deve causar um erro de compilação, mas System.Xml criar o esquema sem erros.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>

Se você tentar validar o XML a seguir em relação ao esquema acima, a validação falhará com a seguinte mensagem: "o elemento ' E3 ' tem um elemento filho inválido ' E2 '." e uma XmlSchemaValidationException exceção será lançada.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>

Para contornar esse problema, você pode alternar as declarações de elemento no documento XSD.To work around this problem, you can swap element declarations in the XSD document. Por exemplo: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>

se torna isso: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>

Veja outro exemplo do mesmo problema: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>

Se você tentar validar o XML a seguir em relação ao esquema acima, a validação falhará com a seguinte exceção: "exceção sem tratamento: System.Xml.Schema.XmlSchemaValidationException: o elemento ' E2 ' El é inválido-o valor ' abc ' é inválido de acordo com seu tipo 'http://www.w3.org/2001/XMLSchema:int' de dados-a cadeia de caracteres ' abc ' não é um valor Int32 válido."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>

Considerações sobre segurançaSecurity considerations

Os tipos e membros no System.Xml namespace dependem do sistema de segurança do .net.The types and members in the System.Xml namespace rely on the .NET security system. As seções a seguir discutem problemas de segurança específicos para tecnologias XML.The following sections discuss security issues that are specific to XML technologies.

Observe também que, quando você usar os System.Xml tipos e membros, se o XML contiver dados com possíveis implicações de privacidade, você precisará implementar seu aplicativo de forma que respeite a privacidade dos usuários finais.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.

Acesso externoExternal access

Várias tecnologias XML tem a capacidade de recuperar outros documentos durante o processamento.Several XML technologies have the ability to retrieve other documents during processing. Por exemplo, um Document type definition (DTD) pode residir no documento que está sendo analisada.For example, a document type definition (DTD) can reside in the document being parsed. O DTD também pode viver em um documento externa que é referenciado pelo documento que está sendo analisada.The DTD can also live in an external document that is referenced by the document being parsed. O idioma da definição de esquema XML (XSD) e tecnologias XSLT também têm a capacidade para incluir informações de outros arquivos.The XML Schema definition language (XSD) and XSLT technologies also have the ability to include information from other files. Esses recursos externos podem apresentar algumas preocupações de segurança.These external resources can present some security concerns. Por exemplo, você desejará garantir que seu aplicativo Recupere arquivos somente de sites confiáveis e que o arquivo que ele recupera não contenha dados mal-intencionados.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.

A XmlUrlResolver classe é usada para carregar documentos XML e para resolver recursos externos, como entidades, DTDs ou esquemas, e importar ou incluir diretivas.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.

Você pode substituir essa classe e especificar o XmlResolver objeto a ser usado.You can override this class and specify the XmlResolver object to use. Use a classe de XmlSecureResolver se você precisa abrir um recurso que você não controle, ou que é não confiável.Use the XmlSecureResolver class if you need to open a resource that you do not control, or that is untrusted. XmlSecureResolver envolve XmlResolver e permite que você restringir os recursos a que XmlResolver subjacente tem acesso.The XmlSecureResolver wraps an XmlResolver and allows you to restrict the resources that the underlying XmlResolver has access to.

Negação de serviçoDenial of service

Os seguintes cenários são considerados menos vulneráveis a ataques de negação de serviço como as classes de System.Xml fornecem um meio da proteção de como ataques.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.

  • Dados XML de texto de análise.Parsing text XML data.

  • Analisar dados XML binários se os dados XML binários tiverem sido gerados pelo Microsoft SQL Server.Parsing binary XML data if the binary XML data was generated by Microsoft SQL Server.

  • Escrevendo documentos XML e fragmentos de fontes de dados para o sistema de arquivos, para fluxos, a TextWriter, ou a StringBuilder.Writing XML documents and fragments from data sources to the file system, streams, a TextWriter, or a StringBuilder.

  • Documentos de carregamento em Document Object Model (DOM) objeto se você estiver usando um objeto e XmlReader de XmlReaderSettings.DtdProcessing definidos como 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.

  • Navegando no objeto DOM.Navigating the DOM object.

Os seguintes cenários não são recomendados se você estiver preocupado sobre ataques de negação de serviço, ou se você estiver trabalhando em um ambiente não confiável.The following scenarios are not recommended if you are concerned about denial of service attacks, or if you are working in an untrusted environment.

  • Processamento de DTD.DTD processing.

  • Processamento de esquema.Schema processing. Isso inclui adicionar um esquema não confiável a coleção do esquema, criar um esquema não confiável, e validar-lo usando um esquema não confiável.This includes adding an untrusted schema to the schema collection, compiling an untrusted schema, and validating by using an untrusted schema.

  • Processamento de XSLT.XSLT processing.

  • Analisando qualquer fluxo arbitrário de usuário fornecido dados binários XML.Parsing any arbitrary stream of user supplied binary XML data.

  • Operações DOM como subpropriedades árvores consulte, editar, em movimento entre documentos, e salvar objetos DOM.DOM operations such as querying, editing, moving sub-trees between documents, and saving DOM objects.

Se você estiver preocupado com problemas de negação de serviço ou se estiver lidando com fontes não confiáveis, não habilite o processamento de DTD.If you are concerned about denial of service issues or if you are dealing with untrusted sources, do not enable DTD processing. Isso é desabilitado por padrão em XmlReader objetos XmlReader.Create criados pelo método.This is disabled by default on XmlReader objects that the XmlReader.Create method creates.

Observação

XmlTextReader permite o DTD que processa por padrão.The XmlTextReader allows DTD processing by default. Use a propriedade de XmlTextReader.DtdProcessing para desativar esse recurso.Use the XmlTextReader.DtdProcessing property to disable this feature.

Se você tiver o processamento de DTD habilitado, poderá usar a XmlSecureResolver classe para restringir os recursos que o XmlReader pode acessar.If you have DTD processing enabled, you can use the XmlSecureResolver class to restrict the resources that the XmlReader can access. Você também pode criar seu aplicativo para que o processamento de XML seja de memória e tempo restrito.You can also design your app so that the XML processing is memory and time constrained. Por exemplo, você pode configurar limites de tempo limite em seu aplicativo ASP.NET.For example, you can configure timeout limits in your ASP.NET app.

Considerações sobre processamentoProcessing considerations

Porque os documentos XML podem incluir referências a outros arquivos, é difícil determinar quanto poder de processamento é necessária para analisar um documento 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. Por exemplo, documentos XML podem incluir um DTD.For example, XML documents can include a DTD. Se o DTD contém entidades aninhadas ou modelos de conteúdo complexos, poderia levar uma quantidade excessiva de tempo para analisar o documento.If the DTD contains nested entities or complex content models, it could take an excessive amount of time to parse the document.

Ao usar XmlReader, você pode limitar o tamanho de documento que pode ser analisado definindo a propriedade de XmlReaderSettings.MaxCharactersInDocument .When using XmlReader, you can limit the size of the document that can be parsed by setting the XmlReaderSettings.MaxCharactersInDocument property. Você pode limitar o número de caracteres resultantes de expanda entidades definindo a propriedade de XmlReaderSettings.MaxCharactersFromEntities .You can limit the number of characters that result from expanding entities by setting the XmlReaderSettings.MaxCharactersFromEntities property. Consulte os tópicos de referência adequadas para exemplos de definir essas propriedades.See the appropriate reference topics for examples of setting these properties.

As tecnologias XSD e XSLT têm recursos adicionais que podem afetar o desempenho de processamento.The XSD and XSLT technologies have additional capabilities that can affect processing performance. Por exemplo, é possível criar um esquema XML que requer um montante considerável de tempo de processamento quando avaliada sobre um documento relativamente pequeno.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. Também é possível inserir blocos de script em uma folha de estilos XSLT.It is also possible to embed script blocks within an XSLT style sheet. Ambos os casos representam uma possível ameaça à segurança para seu aplicativo.Both cases pose a potential security threat to your app.

Ao criar um aplicativo que usa a XslCompiledTransform classe, você deve estar ciente dos seguintes itens e suas implicações:When creating an app that uses the XslCompiledTransform class, you should be aware of the following items and their implications:

  • O script XSLT é desativado por padrão.XSLT scripting is disabled by default. O script XSLT deverá ser habilitado somente se você precisar de suporte a script e estiver trabalhando em um ambiente totalmente confiável.XSLT scripting should be enabled only if you require script support and you are working in a fully trusted environment.

  • A função XSLT document() é desativada por padrão.The XSLT document() function is disabled by default. Se você ativar a função de document() , restringir os recursos que podem ser acessados passando um objeto de XmlSecureResolver para o método de 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.

  • Os objetos de extensão estão habilitados por padrão.Extension objects are enabled by default. Se um objeto de XsltArgumentList que contém objetos de extensão é passado para o método de XslCompiledTransform.Transform , os objetos de extensão são usados.If an XsltArgumentList object that contains extension objects is passed to the XslCompiledTransform.Transform method, the extension objects are used.

  • As folhas de estilos XSLT podem incluir referências a outros arquivos e blocos de script inseridos.XSLT style sheets can include references to other files and embedded script blocks. Um usuário mal-intencionado pode explorar isto fornecendo o com dados ou folhas de estilos que, quando executados, podem fazer com que seu sistema processa até o computador executam baixo em recursos.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.

  • Os aplicativos XSLT que são executados em um ambiente de confiança mista podem resultar em falsificação de folha de estilo.XSLT apps that run in a mixed trust environment can result in style sheet spoofing. Por exemplo, um usuário mal-intencionado pode carregar um objeto com uma folha de estilos prejudicial e entregá-lo fora a outro usuário que subseqüentemente chama o método de XslCompiledTransform.Transform e executa a transformação.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.

Essas questões de segurança podem ser abrandadas não ativando scripts ou função de document() a menos que a folha de estilos vem de uma fonte não confiável, e retornando objetos de XslCompiledTransform , dados de folhas de estilos XSLT, ou de código-fonte XML de uma fonte não confiável.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.

Tratamento de exceçãoException handling

Exceções geradas por componentes de nível inferior podem divulgar informações de caminho que você não deseja que sejam expostas ao aplicativo.Exceptions thrown by lower level components can disclose path information that you do not want exposed to the app. Seus aplicativos devem capturar exceções e processá-las adequadamente.Your apps must catch exceptions and process them appropriately.

Confira também