Compartilhar via


Integração XML com dados relacionais e ADO.NET

A classe XmlDataDocument é uma classe derivada do XmlDocument e contém dados XML. A vantagem do XmlDataDocument é que ele fornece uma ponte entre dados relacionais e hierárquicos. É um XmlDocument que pode ser associado a um DataSet e ambas as classes podem sincronizar alterações feitas em dados contidos nas duas classes. Um XmlDocument associado a um DataSet permite que o XML se integre aos dados relacionais e você não precisa ter seus dados representados como XML ou em um formato relacional. Você pode fazer as duas coisas e não ser restringido a uma única representação dos dados.

Os benefícios de ter dados disponíveis em dois modos de exibição são:

  • A parte estruturada de um documento XML pode ser mapeada para um conjunto de dados e ser armazenada, indexada e pesquisada com eficiência.

  • Transformações, validação e navegação podem ser feitas com eficiência por meio de um modelo de cursor sobre os dados XML armazenados relacionalmente. Às vezes, ele pode ser feito com mais eficiência em relação a estruturas relacionais do que se o XML for armazenado em um modelo XmlDocument .

  • O DataSet pode armazenar uma parte do XML. Ou seja, você pode usar XPath ou XslTransform para armazenar em um DataSet apenas esses elementos e atributos de interesse. A partir daí, as alterações podem ser feitas no subconjunto menor e filtrado de dados, com as alterações propagando para os dados maiores no XmlDataDocument.

Você também pode executar uma transformação sobre os dados que foram carregados no DataSet do SQL Server. Outra opção é associar controles WinForm e WebForm gerenciados por estilo de classes do .NET Framework a um Conjunto de Dados que foi preenchido de um fluxo de entrada XML.

Além de dar suporte a XslTransform, um XmlDataDocument expõe dados relacionais a consultas XPath e validação. Basicamente, todos os serviços XML estão disponíveis em dados relacionais e as instalações relacionais, como associação de controle, codegen e assim por diante, estão disponíveis em uma projeção estruturada de XML sem comprometer a fidelidade XML.

Como XmlDataDocument é herdado de um XmlDocument, ele fornece uma implementação do DOM W3C. O fato de o XmlDataDocument estar associado e armazenar um subconjunto de seus dados dentro, um DataSet não restringe nem altera seu uso como um XmlDocument de qualquer forma. O código escrito para consumir XmlDocument funciona sem alteração com XmlDataDocument. O DataSet fornece a exibição relacional dos mesmos dados definindo tabelas, colunas, relações e restrições e é um armazenamento de dados de usuário autônomo na memória.

A ilustração a seguir mostra as diferentes associações que os dados XML têm com o DataSet e xmlDataDocument:

Diagrama que mostra associações diferentes com o Conjunto de Dados XML.

A ilustração mostra que os dados XML podem ser carregados diretamente em um DataSet, o que permite a manipulação direta com XML da maneira relacional. Ou, o XML pode ser carregado em uma classe derivada do DOM, que é o XmlDataDocument, e posteriormente carregado e sincronizado com o DataSet. Como o DataSet e o XmlDataDocument são sincronizados em um único conjunto de dados, as alterações feitas nos dados em um repositório são refletidas no outro repositório.

O XmlDataDocument herda todos os recursos de edição e navegação do XmlDocument. Há momentos em que usar o XmlDataDocument e seus recursos herdados, sincronizados com um DataSet, é uma opção mais apropriada do que carregar XML diretamente no DataSet. A tabela a seguir mostra os itens a serem considerados ao escolher qual método usar para carregar o DataSet.

Quando carregar XML diretamente em um DataSet Quando sincronizar um XmlDataDocument com um DataSet
As consultas de dados no DataSet são mais fáceis de usar o SQL do que o XPath. As consultas XPath são necessárias em relação aos dados no DataSet.
A preservação da ordenação de elementos no XML de origem não é crítica. A preservação da ordenação de elementos no XML de origem é crítica.
O espaço em branco entre elementos e formatação não precisa ser preservado no XML de origem. O espaço em branco e a preservação da formatação no XML de origem são críticos.

Se carregar e gravar XML diretamente para dentro e fora de um Conjunto de Dados atende às suas necessidades, consulte Carregando um Conjunto de Dados a partir de XML e Gravando um Conjunto de Dados como Dados XML.

Se o carregamento do DataSet de um XmlDataDocument atender às suas necessidades, consulte Sincronizar um conjunto de dados com um documento XML.

Consulte também