System.Xml Namespace
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Fornece suporte baseado em padrões para processamento de XML.
Classes
NameTable |
Implementa um XmlNameTable single-threaded. |
UniqueId |
Um identificador exclusivo otimizado para Guids. |
XmlAttribute |
Representa um atributo. Os valores válidos e padrão do atributo são definidos em um DTD (definição de tipo de documento) ou esquema. |
XmlAttributeCollection |
Representa uma coleção de atributos que podem ser acessados por nome ou índice. |
XmlBinaryReaderSession |
Permite que cadeias de caracteres otimizadas sejam gerenciadas de uma forma dinâmica. |
XmlBinaryWriterSession |
Permite usar um dicionário dinâmico para compactar cadeias de caracteres comuns que aparecem em uma mensagem e manter o estado. |
XmlCDataSection |
Representa uma seção CDATA. |
XmlCharacterData |
Fornece métodos de manipulação que são usados por várias classes. |
XmlComment |
Representa o conteúdo de um comentário XML. |
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). Ao converter tipos de dados, os valores retornados independem da localidade. |
XmlDataDocument |
Permite que os dados estruturados sejam armazenados, recuperados e manipulados por meio de um DataSet relacional. |
XmlDeclaration |
Representa o nó de declaração XML <?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). |
XmlDictionaryReader |
Uma classe |
XmlDictionaryReaderQuotas |
Contém valores de cota configuráveis para XmlDictionaryReaders. |
XmlDictionaryString |
Representa uma entrada armazenada em um XmlDictionary. |
XmlDictionaryWriter |
Representa uma classe abstrata que o WCF (Windows Communication Foundation) deriva de XmlWriter para realizar serialização e desserialização. |
XmlDocument |
Representa um documento XML. Você pode usar essa classe para carregar, validar, editar, adicionar e posicionar o XML em um documento. |
XmlDocumentFragment |
Representa um objeto leve que é útil para operações de inserção de árvore. |
XmlDocumentType |
Representa a declaração de tipo do documento. |
XmlDocumentXPathExtensions |
Fornece métodos de extensão para XmlDocument e XmlNode para navegação em documentos. |
XmlElement |
Representa um elemento. |
XmlEntity |
Representa uma declaração de entidade, como <!ENTITY... >. |
XmlEntityReference |
Representa um nó de referência de entidade. |
XmlException |
Retorna informações detalhadas sobre a última exceção. |
XmlImplementation |
Define o contexto de um conjunto de objetos XmlDocument. |
XmlLinkedNode |
Obtém o nó imediatamente anterior ou posterior a este nó. |
XmlNamedNodeMap |
Representa uma coleção de nós que podem ser acessados por nome ou índice. |
XmlNamespaceManager |
Resolve, adiciona e remove namespaces de uma coleção e fornece gerenciamento de escopo para esses namespaces. |
XmlNameTable |
Tabela de objetos atomizados de cadeia de caracteres. |
XmlNode |
Representa um único nó no mapa do documento XML. |
XmlNodeChangedEventArgs |
Fornece dados para os eventos NodeChanged, NodeChanging, NodeInserted, NodeInserting, NodeRemoved e NodeRemoving. |
XmlNodeList |
Representa uma coleção ordenada de nós. |
XmlNodeReader |
Representa um leitor que fornece acesso rápido não armazenado em cache e somente de encaminhamento aos dados XML em um XmlNode. |
XmlNotation |
Representa uma declaração de notação, como <!NOTATION... >. |
XmlParserContext |
Fornece todas as informações de contexto obrigatórias para o XmlReader para analisar um fragmento XML. |
XmlProcessingInstruction |
Representa uma instrução de processamento, a qual é definida pelo XML para manter informações específicas do processador no texto do documento. |
XmlQualifiedName |
Representa um nome qualificado de XML. |
XmlReader |
Representa um leitor que fornece acesso rápido não armazenado em cache e somente de encaminhamento aos dados XML. |
XmlReaderSettings |
Especifica um conjunto de recursos para dar suporte ao objeto XmlReader criado pelo método Create. |
XmlResolver |
Resolve recursos XML externos nomeados por um URI (Uniform Resource Identifier). |
XmlSecureResolver |
Ajuda a proteger outra implementação de XmlResolver encapsulando o objeto XmlResolver e restringindo os recursos aos quais o XmlResolver subjacente tem acesso. |
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'. Isso também é chamado de espaço em branco significativo. |
XmlText |
Representa o conteúdo de texto de um elemento ou atributo. |
XmlTextReader |
Representa um leitor que fornece acesso rápido não armazenado em cache e somente de encaminhamento aos dados XML. A partir do .NET Framework 2.0, recomendamos o uso da classe XmlReader. |
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. A partir do .NET Framework 2.0, recomendamos o uso da classe XmlWriter. |
XmlUrlResolver |
Resolve recursos XML externos nomeados por um URI (Uniform Resource Identifier). |
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). Essa classe está obsoleta. 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. |
XmlWhitespace |
Representa o espaço em branco no conteúdo do elemento. |
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. |
XmlWriterSettings |
Especifica um conjunto de recursos para dar suporte ao objeto XmlWriter criado pelo método Create. |
XmlXapResolver |
O tipo XmlXapResolver é usado para resolver recursos no pacote XAP do aplicativo Silverlight. |
Interfaces
IApplicationResourceStreamResolver |
Representa um resolvedor de fluxo de recurso do aplicativo. |
IFragmentCapableXmlDictionaryWriter |
Contém propriedades e métodos que, quando implementados por um XmlDictionaryWriter, permitem o processamento de fragmentos XML. |
IHasXmlNode |
Permite que uma classe retorne um XmlNode do contexto ou posição atual. |
IStreamProvider |
Representa uma interface que pode ser implementada pelas classes que fornecem fluxos. |
IXmlBinaryReaderInitializer |
Fornece métodos para reinicializar um leitor binário para ler um documento novo. |
IXmlBinaryWriterInitializer |
Especifica os requisitos de implementação para gravadores binários XML que derivam desta interface. |
IXmlDictionary |
Um |
IXmlLineInfo |
Fornece uma interface para permitir que uma classe retorne informações de linha e posição. |
IXmlMtomReaderInitializer |
Especifica os requisitos de implementação para os leitores de MTOM XML que derivam dessa interface. |
IXmlMtomWriterInitializer |
Quando implementado por um gravador MTOM, essa interface garante a inicialização para um gravador MTOM. |
IXmlNamespaceResolver |
Fornece acesso somente leitura a um conjunto de mapeamentos de prefixo e namespace. |
IXmlTextReaderInitializer |
Especifica os requisitos de implementação para leitores de texto XML que derivam desta interface. |
IXmlTextWriterInitializer |
Especifica os requisitos de implementação para gravadores de texto XML que derivam desta interface. |
Enumerações
ConformanceLevel |
Especifica a quantidade de verificação de entrada ou saída que os objetos XmlReader e XmlWriter executam. |
DtdProcessing |
Especifica as opções para processar os DTDs. A enumeração DtdProcessing é usada pela classe XmlReaderSettings. |
EntityHandling |
Especifica como o XmlTextReader ou XmlValidatingReader trata entidades. |
Formatting |
Especifica opções de formatação para o XmlTextWriter. |
NamespaceHandling |
Especifica se as declarações de namespace duplicados no XmlWriter devem ser removidas. |
NewLineHandling |
Especifica como lidar com quebras de linha. |
ReadState |
Especifica o estado do leitor. |
ValidationType |
Especifica o tipo de validação a ser executada. |
WhitespaceHandling |
Especifica como o espaço em branco é tratado. |
WriteState |
Especifica o estado do XmlWriter. |
XmlDateTimeSerializationMode |
Especifica como tratar o valor temporal ao converter entre cadeias de caracteres e DateTime. |
XmlDictionaryReaderQuotaTypes |
Enumera os valores de cota configuráveis para XmlDictionaryReaders. |
XmlNamespaceScope |
Define o escopo de namespace. |
XmlNodeChangedAction |
Especifica o tipo da alteração de nó. |
XmlNodeOrder |
Descreve a ordem de um nó no documento em comparação a um segundo nó. |
XmlNodeType |
Especifica o tipo de nó. |
XmlOutputMethod |
Especifica o método usado para serializar a saída XmlWriter. |
XmlSpace |
Especifica o escopo |
XmlTokenizedType |
Representa o tipo XML para a cadeia de caracteres. Isso permite que a cadeia de caracteres seja lida como um tipo XML específico, por exemplo, um tipo de seção CDATA. |
Delegados
OnXmlDictionaryReaderClose |
|
XmlNodeChangedEventHandler |
Representa o método que manipula eventos NodeChanged, NodeChanging, NodeInserted, NodeInserting, NodeRemoved e NodeRemoving. |
Comentários
Padrões com suporte
O System.Xml namespace dá suporte a esses padrões:
Namespaces XML, nível de fluxo e DOM
Consulte a seção Diferenças das especificações W3C para dois casos em que as classes XML diferem das recomendações do W3C.
Namespaces relacionados
O .NET também fornece outros namespaces para operações relacionadas a XML. Para obter uma lista, descrições e links, consulte System.Xml Namespaces.
Processando XML de forma assíncrona
As System.Xml.XmlReader classes e System.Xml.XmlWriter incluem vários métodos assíncronos baseados no modelo de programação assíncrona. Esses métodos podem ser identificados pela cadeia de caracteres "Async" no final de seus nomes. Com esses métodos, você pode escrever código assíncrono semelhante ao seu código síncrono e migrar facilmente seu código síncrono existente para código assíncrono.
Use os métodos assíncronos em aplicativos em que há latência significativa de fluxo de rede. Evite usar as APIs assíncronas para o fluxo de memória ou operações de leitura/gravação do fluxo de arquivos local. O fluxo de entrada, XmlTextReadere XmlTextWriter também devem dar suporte a operações assíncronas. Caso contrário, os threads ainda serão bloqueados por operações de E/S.
Não recomendamos misturar chamadas de função síncronas e assíncronas, pois você pode esquecer de usar o
await
palavra-chave ou usar uma API síncrona em que uma assíncrona é necessária.Não defina o XmlReaderSettings.Async sinalizador ou XmlWriterSettings.Async como
true
se você não pretende usar um método assíncrono.Se você esquecer de especificar o
await
palavra-chave ao chamar um método assíncrono, os resultados serão não determinísticos: você pode receber o resultado esperado ou uma exceção.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, portanto, a recuperação da XmlReader.Value propriedade pode ser bloqueada por uma operação de E/S. 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.
Ao usar um XmlWriter objeto , chame o XmlWriter.FlushAsync método antes de chamar XmlWriter.Close para evitar bloquear uma operação de E/S.
Diferenças das especificações do W3C
Em dois casos que envolvem restrições em componentes de esquema de grupo de modelos, o System.Xml namespace difere das recomendações do W3C.
Consistência em declarações de elemento:
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.
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. Isso deve causar um erro, mas System.Xml compila e valida o esquema sem erros.
<?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. 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
. 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
.
Atribuição de partícula exclusiva:
Sob as seguintes condições, a System.Xml implementação não atende à "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.
Um dos elementos no grupo referencia outro elemento.
O elemento referenciado é um elemento principal de um grupo de substituição.
O grupo de substituição contém um elemento que tem o mesmo nome que um dos elementos no grupo.
A cardinalidade do elemento que faz referência ao elemento de cabeçalho do grupo de substituição e ao elemento com o mesmo nome que um elemento de grupo de substituição não é fixa (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 que um elemento de grupo de substituição.
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.
<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 seguinte XML em relação ao esquema acima, a validação falhará com a seguinte mensagem: "O elemento 'e3' tem o elemento filho 'e2' inválido" e uma exceção XmlSchemaValidationException será gerada.
<e3>
<e2>1</e2>
<e2>2</e2>
</e3>
Para solucionar esse problema, você pode trocar declarações de elemento no documento XSD. Por exemplo:
<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:
<xs:sequence>
<xs:element name="e2" type="xs:int" minOccurs="0" maxOccurs="1"/>
<xs:element ref="e1" minOccurs="0" maxOccurs="1"/>
</xs:sequence>
Aqui está outro exemplo do mesmo problema:
<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 seguinte XML 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."
<e3><e2>abc</e2></e3>
Considerações sobre segurança
Os tipos e membros no System.Xml namespace dependem do sistema de segurança .NET. As seções a seguir discutem problemas de segurança específicos das tecnologias XML.
Observe também que, quando você usa os System.Xml tipos e membros, se o XML contém dados que têm possíveis implicações de privacidade, você precisa implementar seu aplicativo de uma maneira que respeite a privacidade dos usuários finais.
Acesso externo
Várias tecnologias XML tem a capacidade de recuperar outros documentos durante o processamento. Por exemplo, um Document type definition (DTD) pode residir no documento que está sendo analisada. O DTD também pode viver em um documento externa que é referenciado pelo documento que está sendo analisada. 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. Esses recursos externos podem apresentar algumas preocupações de segurança. Por exemplo, você deseja garantir que seu aplicativo recupere arquivos somente de sites confiáveis e que o arquivo recuperado não contenha dados mal-intencionados.
A XmlUrlResolver classe é usada para carregar documentos XML e para resolve recursos externos, como entidades, DTDs ou esquemas, e importar ou incluir diretivas.
Você pode substituir essa classe e especificar o XmlResolver objeto a ser usado. Use a classe de XmlSecureResolver se você precisa abrir um recurso que você não controle, ou que é não confiável. XmlSecureResolver envolve XmlResolver e permite que você restringir os recursos a que XmlResolver subjacente tem acesso.
Negação de serviço
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.
Dados XML de texto de análise.
Analisando dados XML binários se os dados XML binários foram gerados pelo Microsoft SQL Server.
Escrevendo documentos XML e fragmentos de fontes de dados para o sistema de arquivos, para fluxos, a TextWriter, ou 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.
Navegando no objeto DOM.
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.
Processamento de DTD.
Processamento de esquema. 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.
Processamento de XSLT.
Analisando qualquer fluxo arbitrário de usuário fornecido dados binários XML.
Operações DOM como subpropriedades árvores consulte, editar, em movimento entre documentos, e salvar objetos DOM.
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. Isso é desabilitado por padrão em XmlReader objetos que o XmlReader.Create método cria.
Observação
XmlTextReader permite o DTD que processa por padrão. Use a propriedade de XmlTextReader.DtdProcessing para desativar esse recurso.
Se você tiver o processamento de DTD habilitado, poderá usar a XmlSecureResolver classe para restringir os recursos que o XmlReader pode acessar. Você também pode projetar seu aplicativo para que o processamento XML seja de memória e tempo restritos. Por exemplo, você pode configurar limites de tempo limite em seu aplicativo ASP.NET.
Considerações sobre processamento
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. Por exemplo, documentos XML podem incluir um 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.
Ao usar XmlReader, você pode limitar o tamanho de documento que pode ser analisado definindo a propriedade de XmlReaderSettings.MaxCharactersInDocument . Você pode limitar o número de caracteres resultantes de expanda entidades definindo a propriedade de XmlReaderSettings.MaxCharactersFromEntities . Consulte os tópicos de referência adequadas para exemplos de definir essas propriedades.
As tecnologias XSD e XSLT têm recursos adicionais que podem afetar o desempenho de processamento. 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. Também é possível inserir blocos de script em uma folha de estilos XSLT. Ambos os casos representam uma possível ameaça à segurança para seu aplicativo.
Ao criar um aplicativo que usa a XslCompiledTransform classe , você deve estar ciente dos seguintes itens e suas implicações:
O script XSLT é desativado por padrão. O script XSLT deverá ser habilitado somente se você precisar de suporte a script e estiver trabalhando em um ambiente totalmente confiável.
A função XSLT
document()
é desativada por padrão. Se você ativar a função dedocument()
, restringir os recursos que podem ser acessados passando um objeto de XmlSecureResolver para o método de XslCompiledTransform.Transform .Os objetos de extensão estão habilitados por padrão. 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.
As folhas de estilos XSLT podem incluir referências a outros arquivos e blocos de script inseridos. 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.
Aplicativos XSLT executados em um ambiente de confiança mista podem resultar em falsificação de folha de estilos. 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.
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.
Tratamento de exceções
Exceções geradas por componentes de nível inferior podem divulgar informações de caminho que você não deseja expor ao aplicativo. Seus aplicativos devem capturar exceções e processá-las adequadamente.