Tutorial C# - Linq to XML Date : 19 de Maio de 2009 Olá a todos hoje vou-vos falar de Linq to XML. Já abordei num post anterior este tema mas mais especifico para Datasets. Neste tutorial vou-vos mostrar como podem interagir com ficheiros XML, para isso vamos criar uma pequena aplicação que vai permitir gerir uma base de dados de filmes. Neste tutorial: Vamos navegar, adicionar, editar e apagar elementos de um ficheiro XML através de LINQ, e como irão ver é muito simples e numa sintaxe muito intuitiva. Navegar: http://www.pplware.com Pplware 1 / 9
Para navegar por um ficheiro XML temos de o abrir primeiro. XElement Filmes = XElement.Load(caminho); Para vermos os elementos na nossa form utilizei uma treeview, vamos carregar todos os títulos provenientes do ficheiro XML, para isso fazemos uma query LINQ, var query = from Filme in Filmes.Elements("Filme") http://www.pplware.com Pplware 2 / 9
select Filme.Element("Titulo"); Carregamos a variável query com os dados do XML, ao encontrar um elemento Filme que é o pai vai retornar todos os Titulos. foreach (var filme in query) { TreeNode childnode = new TreeNode(filme.Value); node.nodes.add(childnode); } Para cada titulo adicionamos o seu Texto á treeview. Adicionar: Para adicionar temos de abrir o ficheiro novamente. E criamos um XELement, com a utilização de LINQ este processo ficou mais simples, é só irmos adicionando novos elementos ou atributos encadiados, neste exemplo criamos um novo filme em que abrimos a tag Filme no inicio e só fechamos no final para este se tornar o pai, os outros elementos são criados e logo fechados, para assim não conterem filhos. XElement novofilme = new XElement("Filme", // Começo do elemento Filme new XElement("Titulo", textbox5.text), // Adicionado o elemento Titulo http://www.pplware.com Pplware 3 / 9
new XElement("Rating", textbox6.text), // Adicionado o elemento Rating new XElement("Data", textbox4.text) // Adicionado o elemento Data ); // Fim do elemento Filme Por fim adicionamos este elemento Filme ao ficheiro. Filmes.Add(novoFilme); // Adicionamos o novo filme ao xml Filmes.Save(caminho); // Temos de gravar as alterações para o ficheiro Editar: Para editar o processo é muito semelhante, a única diferença é que em vez de ser do tipo var o elemento tem de ser do tipo IEnumerable para assim podermos aceder ás propriedados dos XElements do loop foreach. A query também sofre uma alteração, em que vamos comparar com uma clausula Where se o titulo do elemento é igual ao item que está seleccionado na treeview. where ((string)b.element("titulo")).equals(treeview1.selectednode.text) No loop como temos acesso ás propriedados do XElement vamos executar a seguinte http://www.pplware.com Pplware 4 / 9
instrução para alterar os valores. ex.setelementvalue("titulo", textbox1.text); Como sempre no final temos de gravar o ficheiro. Apagar: O método de apagar é muito semelhante ao editar em que temos de compara o valor do titulo com um node no ficheiro XML depois de encontrado esse valor fazemos um loop e usamos o método ex.element("titulo").parent.remove(); Com esta instrução apagamos o pai deste Titulo, ou seja, apagamos o filme e todos os seus filhos. Para aceder ás propriedades como disse anteriormente a variável da query não pode ser var http://www.pplware.com Pplware 5 / 9
mas sim um XElement. Navegação 2: Um dos comportamentos do programa é ao clicar num item da treeview ele popula umas textboxes com os valores desse filme, para fazer isso é muito simples. Abrimos o ficheiro como sempre. Depois na query a grande diferença é que adicionamos propriedades á variável var da query para assim podermos aceder a elas no foreach select new { Titulo = (string)b.element("titulo"), http://www.pplware.com Pplware 6 / 9
Rating = (string)b.element("rating"), Data = (string)b.element("data") }; Este pedaço de código vai tornar possível aceder ás propriedades da variável resultante da query, e também ficam disponíveis no intellisense. Depois no loop preenchemos as textboxes com os valores. foreach(var dados in Filme) // a var dados já tem as novas propriedades { textbox1.text = dados.titulo; textbox2.text = dados.rating; textbox3.text = dados.data; } Bom por hoje é tudo espero que tenham gostado. Como podem ver e já o referi num post anterior o Linq é uma Framework muito poderosa, simples e muito útil para tudo (quando digo tudo é mesmo tudo). http://www.pplware.com Pplware 7 / 9
Download: Código Linq to XML [110.59KB] Se tiverem alguma duvida ou sugestão sabem onde me encontrar. Boa programação Licença: Freeware Sistemas Operativos: Windows XP/Vista/Win7
Powered by TCPDF (www.tcpdf.org) Download: pplware Link to XML [32.69KB] Homepage: Peopleware http://www.pplware.com Pplware 9 / 9