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 vinculado a um DataSet e ambas as classes podem sincronizar alterações feitas nos dados contidos nas duas classes. Um XmlDocument que está vinculado a um DataSet permite que o XML se integre a 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 ficar restrito a uma única representação dos dados.
Os benefícios de ter dados disponíveis em duas visualizações são:
A parte estruturada de um documento XML pode ser mapeada para um conjunto de dados e ser eficientemente armazenada, indexada e pesquisada.
As transformações, a validação e a navegação podem ser feitas de forma eficiente por meio de um modelo de cursor sobre os dados XML armazenados relacionalmente. Às vezes, isso pode ser feito de forma mais eficiente em 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 os 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 se propagando para os dados maiores no XmlDataDocument.
Você também pode executar uma transformação sobre dados que foram carregados no DataSet do SQL Server. Outra opção é vincular os controles WinForm e WebForm gerenciados por classes do .NET Framework a um DataSet que foi preenchido a partir de um fluxo de entrada XML.
Além de suportar XslTransform, um XmlDataDocument expõe dados relacionais a consultas e validação XPath . Basicamente, todos os serviços XML estão disponíveis sobre dados relacionais, e recursos relacionais, como vinculaçã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 que o XmlDataDocument está associado e armazena um subconjunto de seus dados dentro, um DataSet não restringe ou altera seu uso como um XmlDocument de forma alguma. Código escrito para consumir um XmlDocument funciona inalterado em relação a um 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:
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 armazenamento.
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 usando SQL do que XPath. | As consultas XPath são necessárias sobre os 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 é fundamental. |
O espaço em branco entre os elementos e a 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 essenciais. |
Se carregar e gravar XML diretamente dentro e fora de um DataSet atender às suas necessidades, consulte Carregando um DataSet de XML e Escrevendo um DataSet como Dados XML.
Se o carregamento do DataSet de um XmlDataDocument atender às suas necessidades, consulte Sincronizando um DataSet com um Documento XML.