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


            <?xml version="1.0" encoding="utf-8"?>
            <raiz>
            <logins>
            <LOGIN>123456789</LOGIN>
            <SUCESSO>S</SUCESSO>
            <MSG>Sucesso</MSG>
            </logins>
            <logins>
            <LOGIN>987612345</LOGIN>
            <SUCESSO>N</SUCESSO>
            <MSG>Erro ao tentar incluir usuario</MSG>
            </logins>
            <logins>
            <LOGIN>000000000</LOGIN>
            <SUCESSO>S</SUCESSO>
            <MSG>Sucesso</MSG>
            </logins>
            </raiz>

        


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

//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<Log> RetornaLog()
{
List<Log> vListaLog = new List<Log>();
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.