Utilizando LINQ TO XML
Autor: Ítalo Chesley | Publicado: 2010-02-17T11:08:00-08:00

Às vezes precisamos gravar e/ou pesquisar dados em arquivos XML para alimentar uma base de dados ou extrair dados dela e utilizar para outros fins, então, começamos a nos perguntar: Como&nbsp;fazer isso?
Em versões anteriores&nbsp;do .NET Framework há outras formas de fazê-lo, mas que, em termos de performance, são consideradas mais dispendiosas. Na versão 3.5 do .NET Framework recebemos um presente que vai agilizar muito o andamento dos nossos projetos: O LINQ! E como não poderia deixar de ser, temos também o LINQ TO XML, para trabalhar com arquivos em XML de forma rápida e fácil, sem grandes dores de cabeça.

O&nbsp;LINQ TO XML está implementado no Namespace System.XML.LINQ, portanto, esse será nosso ponto de partida.

Então mãos a obra!

Adicione entre as Using do projeto, o Namespace System.XML.LINQ, para que possamos utilizar as classes do LINQ TO XML durante o Desenvolvimento do nosso raciocínio.

As usings do Projeto deverão ficar assim:










Imagem 1: usings

Além do Namespace System.XML.Linq, implementamos o System.IO, que utilizarmos logo a seguir, na explicação do código.


















Imagem 2: Método de inserção de dados

Muito bem senhores, aqui iniciamos o nosso trabalho propriamente dito. Apesar de o LINQ TO XML ter muitas classes para nossa utilização, trabalharemos, aqui, apenas com o XElement, pois ele tem o poder que precisamos para executar nossa tarefa. Caso queira entender com mais profundidade o LINQ TO XML, aqui, terá informações mais aprofundadas.

Embora tenha colocado todo o código, vou explicá-lo linha a linha.

Primeiro, criamos uma instância global do XElement&nbsp;e o denominamos objXElement. Sendo ela global, poderemos utilizar a mesma instância em todos os nossos métodos, lembrando que não estamos pensando em otimização, mas no aprendizado da classe. A performance dependerá do contexto em que você irá utilizá-la.

Depois de criar a instância, já podemos começar a utilizá-la:

Criei um procedimento que fará a gravação dos dados, e esse procedimento, recebe como parâmetro o caminho do arquivo onde serão gravados os dados. Inicialmente, verificamos então, se o arquivo passado como parâmetro existe(é aí que a classe System.IO entra em ação), caso ele não exista, criamos o elemento"Dados" e, através do método Save, criamos o arquivo. Depois disso, começamos a passar para o a instância do XElement (objXElement) os dados que futuramente ele gravará no arquivo físico.

Primeiro, criamos o Elemento "Aluno", depois, começamos a setar "subelementos" deste Elemento, utilizando o método SetElementValue,&nbsp;que recebe como parâmetro o nome do elemento que será criado e o valor que este elemento terá. No nosso exemplo, temos Nome, Turma e Curso, que recebem os valores de alguns&nbsp;TextBox que foram colocados na página. Mas, você poderia criar quantos quisesse, de acordo com a sua necessidade e preencher os elementos com dados oriundos da sua base de dados, por exemplo.


Neste momento já podemos ver, através do DEBUG do Visual Studio, o corpo do que será adicionado ao arquivo XML.


Imagem 3: Os dados que serão gravados, ainda em memória
Depois disso, criamos uma instância do XElement (objSalvarDados), para carregar o conteúdo que já existe no arquivo, e através do método ADD, adicionarmos o objeto que está com os dados em memória(objXElement). E depois, através do SAVE, no objSalvarDados, salvarmos as alterações. 
Ótimo, agora que já temos dados dentro do arquivo, podemos consultá-los.*A imagem abaixo foi cortada pelo layout do blog, para visualizá-la por completo, clique aqui
Imagem 4: Método de Consulta de Dados
O método de consulta de dados tem dois parâmetros: O caminho do arquivo XML onde buscaremos as informações e quais informações buscaremos.Iniciamos o nosso método de consulta atribuindo à nossa instância global do XElement, os dados que estão dentro do arquivos que salvamos há pouco, através do método LOAD, que recebe como parâmetro, o parâmetro do nosso método de consulta (caminho).Depois, criamos a variável anônima dados, que irá receber os dados que serão pesquisados. Atribuímos ao "a" o conteúdo do elemento "Aluno" do nosso objeto XElement e a partir daí, trabalharemos apenas com o "a". Utilizamos o where, para selecionar apenas os alunos cujos nomes se aproximem do parâmetro do método(NomeAluno), o que é semelhante ao LIKE que utilizamos na linguagem SQL. Depois passamos o order by e escolhemos por qual elemento será selecionado. A particularidade do LINQ to XML é que temos que passar um Element para ordenar, no resto, a sintaxe é igual à do LINQ to SQL.&nbsp;Depois, temos o Select New, onde criamos as "colunas" da nossa consulta. No nosso caso temos três: xNome, xCurso, xTurma. E, por fim,&nbsp;atribuímos a nossa variável dados ao DataSource do GridView e damos o DataBind, para que ele possa carregar esses dados. Utilizamos o GridView como exemplo, mas poderia ser feito com outros controles que também tem a propriedade DataSource.
Utilizando os métodos na prática.
Inserção:

Busca


Você pode baixar os fontes utilizados neste artigo clicando aqui.
Espero que tenha sido tão aproveitável para você, quanto foi pra mim.
Um forte abraço...
Atenciosamente,
Ítalo Chesley