Saber trabalhar com arquivos XML é muito importante. Na plataforma .Net tem crescido cada vez mais a utilização deste tipo de arquivo. Vamos algumas definições sobre XML:

“XML (Extensible Markup Language) é uma recomendação da W3C para gerar linguagens de marcação para necessidades especiais. É um dos subtipos da SGML (acrônimo de Standard Generalized Markup Language, ou Linguagem Padronizada de Marcação Genérica) capaz de descrever diversos tipos de dados. Seu propósito principal é a facilidade de compartilhamento de informações através da internet.”

Peguei a definição de um site de desenvolvimento. É um resumo simples do que significa. Não vou aprofundar sobre o assunto, pois não é o foco do artigo.

Segue um tipo simples de arquivo XML



  
    123456789
    S
    Sucesso
  
  
    987612345
    N
    Erro ao tentar incluir usuario
  
  
    000000000
    S
    Sucesso
  



Podemos utilizar arquivos XML para varias situações. Armazenar dados, arquivos de configuração, compartilhar dados entre sistemas em diferentes plataformas e etc.

Uma breva definição de Linq é:

“um set de recursos introduzidos no Visual Studio 2008 que estende as poderosas capacidades de consulta SQL para as linguagens C# e Visual Basic. O LINQ introduz patterns facilmente aprendidos para consultar e atualizar dados, e uma tecnologia que pode ser estendida para suportar potencialmente qualquer tipo de armazenamento de dados.”

 No artigo falaremos especificamente de LINQ to XML. Não entrarei em detalhes do LINQ. No site DevMedia tem um excelente artigo que explica bem essa parte teórica

http://www.devmedia.com.br/post-22769-Introducao-ao-LINQ.html

O LINQ to XML é um provedor de dados que faz parte do namespace System.Xml.LINQ que foi implementado a partir da versão 3.5 do framework .NET. Com ele podemos ler, gravar e construir dados XML de forma fácil e dinâmica. O Linq to Xml fornece mais recursos e é muito mais eficiente do que o API presente no namespace System.XML que está presente nas versões anteriores e atuais da plataforma .NET. Com LINQ podemos reduzir e muito nosso código para manusear arquivos XML, sendo também muito mais eficiente.

Exemplo:

Vamos usar o exemplo de arquivo XML mostrado no exemplo acima. Neste caso usamos um arquivo XML para armazenar registro de logs de uma determinada atividade em nosso sistema. Para o exemplo não utilizaremos melhores praticas, já que essa aplicação é apenas um exemplo. Criei uma classe estática chamada Log. Para retornar todos os registros do arquivo. Vamos utilizar o exemplo de código abaixo.

public static List RetornaLog()
        {
            List vListaLog = new List();
            Log vLog = new Log();
 
            XElement root = XElement.Load(HttpContext.Current.Server.MapPath("XMLLog.xml"));
 
            var consulta = from p in root.Elements("logins")
                           select new
                           {
                               login = (string)p.Element("LOGIN"),
                               msg = (string)p.Element("MSG"),
                               valida = (string)p.Element("SUCESSO"),
                           };
 
            foreach (var item in consulta)
            {
                vLog = new Log()
                {
                    login = item.login, msg = item.msg,
                    valido = item.valida
                };
 
                vListaLog.Add(vLog);
            }
             return vListaLog;
        }


Explicando o código acima:
Para navegar por um XML temos que abrir o documento usando a classe XElement
Passando o caminho físico do arquivo no construtor. Depois usamos linq para retornar todos os elementos “logins”. Depois basta preencher os objetos e adicionar na lista.

Para incluir um novo elemento no XML usamos o seguinte código:

 
public void InserirLog()
        {
            try
            {
                string vCaminho = HttpContext.Current.Server.MapPath("XMLLog.xml");
                XElement root = XElement.Load(vCaminho);
                XElement novoLog = new XElement("logins",
                    new XElement("LOGIN", this.login),
                    new XElement("MSG", this.msg),
                    new XElement("SUCESSO", this.valido));
 
                root.Add(novoLog);
                root.Save(vCaminho);
            }
            catch (Exception ex)
            {
                this.erroInterno = false;
                this.msgErro = "Erro ao tentar incluir usuário." + ex.Message.ToString();
            }
        }


Para adicionar basta abrir o arquivo utilizando novamente o XElement. Basta criar um elemento, respeitando o formato do arquivo XML. E por fim, adicionar ao XML e salvar o arquivo.

Por hoje é só. Em um próximo artigo falaremos como alterar e excluir tags de um arquivo XML

Qualquer duvida só baixar o projeto de exemplo.