System.Xml Espaço de Nomes
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
Fornece suporte baseado em standards para processamento de XML.
Classes
| Name | Description |
|---|---|
| NameTable |
Implementa um único thread XmlNameTable. |
| UniqueId |
Um identificador único otimizado para Guids. |
| XmlAttribute |
Representa um atributo. Os valores válidos e por defeito para o atributo são definidos numa definição de tipo de documento (DTD) ou esquema. |
| XmlAttributeCollection |
Representa um conjunto de atributos que podem ser acedidos por nome ou índice. |
| XmlBinaryReaderSession |
Permite gerir cadeias otimizadas de forma dinâmica. |
| XmlBinaryWriterSession |
Permite usar um dicionário dinâmico para comprimir as cadeias comuns que aparecem numa mensagem e manter o estado. |
| XmlCDataSection |
Representa uma secção CDATA. |
| XmlCharacterData |
Fornece métodos de manipulação de texto 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 de runtime de linguagem comum e tipos XML Schema Definition Language (XSD). Ao converter tipos de dados, os valores devolvidos são independentes da localidade. |
| XmlDataDocument |
Permite armazenar, recuperar e manipular dados estruturados através de um arquivo relacional DataSet. |
| XmlDeclaration |
Representa o nó <de declaração XML ?xml version='1.0'...?>. |
| XmlDictionary |
Implementa um dicionário utilizado para otimizar as implementações do leitor/escritor XML do Windows Communication Foundation (WCF). |
| XmlDictionaryReader |
Uma classe |
| XmlDictionaryReaderQuotas |
Contém valores de quota configuráveis para XmlDictionaryReaders. |
| XmlDictionaryString |
Representa uma entrada armazenada num XmlDictionary. |
| XmlDictionaryWriter |
Representa uma classe abstrata que Windows Communication Foundation (WCF) deriva de XmlWriter para fazer serialização e desserialização. |
| XmlDocument |
Representa um documento XML. Pode usar esta classe para carregar, validar, editar, adicionar e posicionar XML num documento. |
| XmlDocumentFragment |
Representa um objeto leve que é útil para operações de inserção em árvore. |
| XmlDocumentType |
Representa a declaração do tipo de documento. |
| XmlElement |
Representa um elemento. |
| XmlEntity |
Representa uma declaração de entidade, como <! ENTIDADE... >. |
| XmlEntityReference |
Representa um nó de referência de entidade. |
| XmlException |
Devolve informações detalhadas sobre a última exceção. |
| XmlImplementation |
Define o contexto para um conjunto de XmlDocument objetos. |
| XmlLinkedNode |
Obtém o nó imediatamente anterior ou seguinte a este nó. |
| XmlNamedNodeMap |
Representa uma coleção de nós que podem ser acedidos pelo nome ou por índice. |
| XmlNamespaceManager |
Resolve, adiciona e remove namespaces de uma coleção e fornece gestão de escopos para esses namespaces. |
| XmlNameTable |
Tabela de objetos de corda atomizados. |
| XmlNode |
Representa um único nó no documento XML. |
| XmlNodeChangedEventArgs |
Fornece dados para os NodeChanged, NodeChanging, NodeInserted, NodeInserting, e NodeRemovedNodeRemoving eventos. |
| XmlNodeList |
Representa uma coleção ordenada de nós. |
| XmlNodeReader |
Representa um leitor que fornece acesso rápido, sem cache para encaminhar, apenas a dados XML num XmlNodearquivo . |
| XmlNotation |
Representa uma declaração de notação, como <! NOTAÇÃO... >. |
| XmlParserContext |
Fornece toda a informação de contexto necessária para XmlReader analisar um fragmento XML. |
| XmlProcessingInstruction |
Representa uma instrução de processamento, que o XML define para manter informação específica do processador no texto do documento. |
| XmlQualifiedName |
Representa um nome qualificado por XML. |
| XmlReader |
Representa um leitor que fornece acesso rápido, sem cache e apenas avançado a dados XML. |
| XmlReaderSettings |
Especifica um conjunto de funcionalidades a suportar no XmlReader objeto criado pelo Create método. |
| XmlResolver |
Resolve recursos XML externos nomeados por um Identificador Uniforme de Recursos (URI). |
| XmlSecureResolver |
Ajuda a garantir outra implementação de XmlResolver ao envolver o XmlResolver objeto e restringir os recursos a que o subjacente XmlResolver tem acesso. |
| XmlSignificantWhitespace |
Representa o espaço em branco entre marcação num nó de conteúdo misto ou espaço em branco dentro de um âmbito xml:space= 'preservar'. Isto também é referido como espaço em branco significativo. |
| XmlText |
Representa o conteúdo do texto de um elemento ou atributo. |
| XmlTextReader |
Representa um leitor que fornece acesso rápido, não armazenado em cache e apenas avançado a dados XML. Recomendamos que utilize a XmlReader aula em vez disso. |
| XmlTextWriter |
Representa um escritor que fornece uma forma rápida, não armazenada em cache e apenas para avançar, de gerar fluxos ou ficheiros contendo dados XML que cumprem a W3C Extensible Markup Language (XML) 1.0 e as recomendações Namespaces in XML. Recomendamos que utilize a XmlWriter aula em vez disso. |
| XmlUrlResolver |
Resolve recursos XML externos nomeados por um Identificador Uniforme de Recursos (URI). |
| XmlValidatingReader |
Representa um leitor que fornece definição de tipo de documento (DTD), XML-Data esquema reduzido (XDR) e validação da linguagem XML Schema definition language (XSD). Esta classe está obsoleta. Recomendamos que utilize a XmlReaderSettings classe e o Create método para criar um leitor XML validante. |
| XmlWhitespace |
Representa o espaço em branco no conteúdo dos elementos. |
| XmlWriter |
Representa um escritor que fornece uma forma rápida, sem cache e apenas para avançar, de gerar fluxos ou ficheiros que contenham dados XML. |
| XmlWriterSettings |
Especifica um conjunto de funcionalidades a suportar no XmlWriter objeto criado pelo Create método. |
| XmlXapResolver |
O tipo XmlXapResolver é usado para resolver recursos no pacote XAP da aplicação Silverlight. |
Interfaces
| Name | Description |
|---|---|
| IApplicationResourceStreamResolver |
Representa um resolvedor de fluxo de recursos de aplicação. |
| 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 a partir do contexto ou posição atual. |
| IStreamProvider |
Representa uma interface que pode ser implementada por classes que fornecem fluxos. |
| IXmlBinaryReaderInitializer |
Fornece métodos para reinicializar um leitor binário para ler um novo documento. |
| IXmlBinaryWriterInitializer |
Especifica os requisitos de implementação para escritores binários XML que derivam desta interface. |
| IXmlDictionary |
E |
| IXmlLineInfo |
Fornece uma interface para permitir que uma classe devolva informações de linha e posição. |
| IXmlMtomReaderInitializer |
Especifica os requisitos de implementação para leitores XML MTOM que derivam desta interface. |
| IXmlMtomWriterInitializer |
Quando implementado por um escritor MTOM, esta interface assegura a inicialização para um escritor MTOM. |
| IXmlNamespaceResolver |
Fornece acesso apenas de leitura a um conjunto de mapeamentos de prefixos 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 escritores de texto XML que derivam desta interface. |
Enumerações
| Name | Description |
|---|---|
| ConformanceLevel |
Especifica a quantidade de verificação de entrada ou saída que XmlReader e XmlWriter os objetos executam. |
| DtdProcessing |
Especifica as opções para processar DTDs. A DtdProcessing enumeração é usada pela XmlReaderSettings turma. |
| EntityHandling |
Especifica como o XmlTextReader ou XmlValidatingReader lida com as entidades. |
| Formatting |
Especifica opções de formatação para o XmlTextWriter. |
| NamespaceHandling |
Especifica se deve remover declarações duplicadas de namespace no XmlWriterarquivo . |
| NewLineHandling |
Especifica como lidar com quebras de linha. |
| ReadState |
Especifica o estado do leitor. |
| ValidationType |
Especifica o tipo de validação a realizar. |
| 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 a cadeia e DateTime. |
| XmlDictionaryReaderQuotaTypes |
Enumera os valores de quota configuráveis para XmlDictionaryReaders. |
| XmlNamespaceScope |
Define o âmbito do namespace. |
| XmlNodeChangedAction |
Especifica o tipo de alteração do nó. |
| XmlNodeOrder |
Descreve a ordem do documento de um nó em comparação com um segundo nó. |
| XmlNodeType |
Especifica o tipo de nó. |
| XmlOutputMethod |
Especifica o método usado para serializar a XmlWriter saída. |
| XmlSpace |
Especifica o âmbito atual |
| XmlTokenizedType |
Representa o tipo XML para a cadeia. Isto permite que a cadeia seja lida como um tipo XML específico, por exemplo, um tipo de secção CDATA. |
Delegados
| Name | Description |
|---|---|
| OnXmlDictionaryReaderClose |
|
| XmlNodeChangedEventHandler |
Representa o método que gere NodeChanged, NodeChanging, NodeInserted, NodeInserting, e NodeRemovedNodeRemoving eventos. |
Observações
Padrões suportados
O System.Xml espaço de nomes suporta estes padrões:
- XML 1.0, incluindo suporte DTD
- Espaços de nomes XML, tanto ao nível de fluxo como DOM
- Esquemas XML
- Expressões XPath
- Transformações XSLT
- DOM Nível 1 Núcleo
- DOM Nível 2 Núcleo
Consulte a secção Diferenças em relação às especificações do W3C para dois casos em que as classes XML diferem das recomendações do W3C.
Processamento de 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. Estes métodos podem ser identificados pela string "Assync" no final dos seus nomes. Com estes métodos, pode escrever código assíncrono semelhante ao seu código síncrono, e migrar facilmente o seu código síncrono existente para código assíncrono.
Use os métodos assíncronos em aplicações onde há latência significativa do fluxo de rede. Evite usar as APIs assíncronas para operações de leitura/escrita de fluxo de memória ou de fluxo local de ficheiros. O fluxo de entrada, XmlTextReader, e XmlTextWriter deve também suportar operações assíncronas. Caso contrário, as threads continuarão a ser bloqueadas por operações de E/S.
Não recomendamos misturar chamadas de função síncronas e assíncronas, porque pode esquecer-se de usar a
awaitpalavra-chave ou usar uma API síncrona quando uma assíncrona for necessária.Não defina a XmlReaderSettings.Async flag or XmlWriterSettings.Async como
truese não pretender usar um método assíncrono.Se se esquecer de especificar a
awaitpalavra-chave ao chamar um método assíncrono, os resultados são não determinísticos: pode receber o resultado que esperava ou uma exceção.Quando um XmlReader objeto está a ler um nó de texto grande, pode armazenar apenas um valor parcial do texto em cache e devolver o nó de texto, pelo que 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 do texto em modo assíncrono, ou use o XmlReader.ReadValueChunkAsync método para ler um bloco de texto grande em blocos.
Quando 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 em relação às especificações do W3C
Em dois casos que envolvem restrições nos componentes do esquema do grupo de modelos, o System.Xml espaço de nomes difere das recomendações do W3C.
Consistência nas declarações de elementos:
Em alguns casos, quando são usados grupos de substituição, a System.Xml implementação não satisfaz a "Restrição do Componente do Esquema: Declarações de Elementos Consistentes", descrita na secção Restrições sobre Componentes do Esquema do Grupo de Modelos da especificação do W3C.
Por exemplo, o esquema seguinte inclui elementos com o mesmo nome mas tipos diferentes no mesmo modelo de conteúdo, e são usados grupos de substituição. Isto 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 à substituição, a referência ao elemento e1 da sequência pode resultar num elemento e1 do tipo t1 ou no elemento e2 do tipo t2. Este último caso resultaria numa sequência de dois e2 elementos, onde um é do tipo t2 e o outro do tipo xs:int.
Atribuição única de partículas:
Sob as seguintes condições, a System.Xml implementação não satisfaz a "Restrição de Componentes de Esquema: Atribuição Única de Partículas", descrita na secção Restrições sobre Componentes de Esquema de Grupo de Modelos da especificação W3C.
- Um dos elementos do grupo faz referência a outro elemento.
- O elemento referenciado é um elemento cabeça de um grupo de substituição.
- O grupo de substituição contém um elemento que tem o mesmo nome de um dos elementos do grupo.
- A cardinalidade do elemento que faz referência ao elemento cabeça do grupo de substituição e do elemento com o mesmo nome que um elemento do 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 de um elemento do grupo de substituição.
Por exemplo, no esquema abaixo o modelo de conteúdo é ambíguo e deve causar um erro de compilação, mas System.Xml compila 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 tentar validar o seguinte XML contra o esquema acima, a validação falhará com a seguinte mensagem: "O elemento 'e3' tem o elemento filho 'e2' inválido." e será lançada uma XmlSchemaValidationException exceção.
<e3>
<e2>1</e2>
<e2>2</e2>
</e3>
Para contornar este problema, podes trocar declarações de elementos 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>
torna-se isto:
<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 tentar validar o seguinte XML contra o esquema acima, a validação falhará com a seguinte exceção: "Exceção Não Tratada: System.Xml.Schema.XmlSchemaValidationException: O elemento 'e2' el é inválido - O valor 'abc' é inválido de acordo com o seu tipo 'http://www.w3.org/2001/XMLSchema:int' de dado - A cadeia 'abc' não é um valor válido Int32."
<e3><e2>abc</e2></e3>
Considerações de segurança
Os tipos e membros no espaço de nomes System.Xml dependem do sistema de segurança .NET. As secções seguintes discutem questões de segurança específicas das tecnologias XML.
Note também que, ao usar os System.Xml tipos e membros, se o XML contiver dados com potenciais implicações para a privacidade, precisa de implementar a sua aplicação de forma a respeitar a privacidade dos seus utilizadores finais.
Acesso externo
Várias tecnologias XML têm a capacidade de recuperar outros documentos durante o processamento. Por exemplo, uma definição de tipo de documento (DTD) pode residir no documento a analisar. O DTD também pode estar presente num documento externo que é referenciado pelo documento em análise. As tecnologias XML Schema Definition language (XSD) e XSLT também têm a capacidade de incluir informação de outros ficheiros. Estes recursos externos podem apresentar algumas preocupações de segurança. Por exemplo, deve garantir que a sua aplicação só recupera ficheiros de sites de confiança e que o ficheiro que recupera não contém dados maliciosos.
A XmlUrlResolver classe é usada para carregar documentos XML e para resolver recursos externos como entidades, DTDs ou esquemas, e para importar ou incluir diretivas.
Podes sobrescrever esta classe e especificar o XmlResolver objeto a usar. Use a XmlSecureResolver classe se precisar abrir um recurso que você não controla ou que não é confiável. Os XmlSecureResolver wraps an XmlResolver e permitem restringir os recursos a que o subjacente XmlResolver tem acesso.
Negação de serviço
Os cenários seguintes são considerados menos vulneráveis a ataques de negação de serviço porque as System.Xml classes fornecem um meio de proteção contra tais ataques.
Análise de dados XML de texto.
Análise de dados XML binários se os dados XML binários foram gerados pelo Microsoft SQL Server.
Escrever documentos XML e fragmentos a partir de fontes de dados para o sistema de ficheiros, fluxos, um TextWriter, ou um StringBuilder.
Carregar documentos no objeto Document Object Model (DOM) se estiver a usar um XmlReader objeto e XmlReaderSettings.DtdProcessing definir para DtdProcessing.Prohibit.
A navegar pelo objeto DOM.
Os seguintes cenários não são recomendados se estiver preocupado com ataques de negação de serviço, ou se estiver a trabalhar num ambiente não confiável.
Processamento DTD.
Processamento de esquemas. Isto inclui adicionar um esquema não confiável à coleção de esquemas, compilar um esquema não confiável e validar usando um esquema não confiável.
Processamento XSLT.
Analisar qualquer fluxo arbitrário de dados XML binários fornecidos pelo utilizador.
Operações DOM como consulta, edição, movimentação de subárvores entre documentos e gravação de objetos DOM.
Se estiver preocupado com problemas de negação de serviço ou se estiver a lidar com fontes não confiáveis, não ative o processamento DTD. Isto está desativado por defeito nos XmlReader objetos que o XmlReader.Create método cria.
Note
Permite XmlTextReader o processamento DTD por defeito. Use a XmlTextReader.DtdProcessing propriedade para desativar esta funcionalidade.
Se tiveres o processamento DTD ativado, podes usar a XmlSecureResolver classe para restringir os recursos a que XmlReader eles podem aceder. Você também pode projetar seu aplicativo para que o processamento XML tenha restrição de memória e tempo. Por exemplo, pode definir limites de tempo na sua aplicação ASP.NET.
Considerações de processamento
Como os documentos XML podem incluir referências a outros ficheiros, é difícil determinar quanta potência de processamento é necessária para analisar um documento XML. Por exemplo, documentos XML podem incluir um DTD. Se o DTD contiver entidades aninhadas ou modelos de conteúdo complexos, pode demorar demasiado tempo a analisar o documento.
Ao usar XmlReader, pode limitar o tamanho do documento que pode ser analisado definindo a XmlReaderSettings.MaxCharactersInDocument propriedade. Podes limitar o número de caracteres que resultam da expansão das entidades definindo a XmlReaderSettings.MaxCharactersFromEntities propriedade. Consulte os tópicos de referência apropriados para exemplos de definição destas propriedades.
As tecnologias XSD e XSLT têm capacidades adicionais que podem afetar o desempenho do processamento. Por exemplo, é possível construir um esquema XML que requer um tempo substancial para ser processado quando avaliado sobre um documento relativamente pequeno. Também é possível incorporar blocos de script numa folha de estilo XSLT. Ambos os casos representam uma ameaça potencial à segurança da sua aplicação.
Ao criar uma aplicação que utilize a XslCompiledTransform classe, deve estar ciente dos seguintes itens e das suas implicações:
O script XSLT está desativado por padrão. O script XSLT deve ser habilitado somente se você precisar de suporte a scripts e estiver trabalhando em um ambiente totalmente confiável.
A função XSLT
document()está desativada por padrão. Se você habilitar adocument()função, restrinja os recursos que podem ser acessados passando um XmlSecureResolver objeto para o XslCompiledTransform.Transform método.Os objetos de extensão são habilitados por padrão. Se um XsltArgumentList objeto que contém objetos de extensão for passado para o XslCompiledTransform.Transform método, os objetos de extensão são usados.
As folhas de estilo XSLT podem incluir referências a outros arquivos e blocos de script incorporados. Um utilizador malicioso pode explorar isto fornecendo-lhe dados ou folhas de estilo que, quando executadas, podem fazer com que o sistema processe até o computador ficar sem recursos.
Aplicações XSLT que correm num ambiente de confiança mista podem resultar em falsificação de folhas de estilo. Por exemplo, um usuário mal-intencionado pode carregar um objeto com uma folha de estilos prejudicial e entregá-lo a outro usuário que, posteriormente, chama o XslCompiledTransform.Transform método e executa a transformação.
Esses problemas de segurança podem ser atenuados não habilitando scripts ou a document() função, a menos que a folha de estilos venha de uma fonte confiável e não aceitando XslCompiledTransform objetos, folhas de estilo XSLT ou dados de origem XML de uma fonte não confiável.
Processamento de exceções
Exceções lançadas por componentes de nível inferior podem revelar informações de caminho que não queres expostas à aplicação. As suas candidaturas devem detetar exceções e processá-las adequadamente.