Início > Ado.Net > Linq To XML

Linq To XML

Olá, hoje irei falar sobre um recurso interessante, trata-se do Linq To XML,  você pode criar/buscar  um documento XML , carregar na memória e utilizar o linq (Language-Integrated Query) para efetuar as consultas, é muito simples.

Bom eu fiz alguns exemplos de como utilizar, para utilizar o exemplos dos códigos que irei postar, você irá precisar importar para sua solução os seguintes namespaces:

– System.Xml; -> Saber mais..

– System.Xml.Linq  -> Saber mais..

 Nossas consultas serão feitas em cima do seguinte arquivo XML.

<?xml version="1.0" encoding="utf-8"?>

<SISTEMA>

  <ITEM ID="1"></ITEM>

  <ITEM ID="2">Teste</ITEM>

  <ITEM ID="3">Teste</ITEM>

  <ITEM ID="4">123</ITEM>

  <ITEM ID="5"></ITEM>

  <ITEM ID="6">eu</ITEM>

  <ITEM ID="7"></ITEM>

  <ITEM ID="8">Nelson</ITEM>

</SISTEMA>

 

Repare que a estrutura de nosso arquivo está bem simples, justamente para simplificar  no nosso artigo, porém quanto maior a complexidade, maior o ganho de produtividade com o Linq.

Nota:    A partir de uma perspectiva XML, LINQ To XML prevê a consulta com os mesmos recursos do XQuery e XPath do . NET Framework. This provides a consistent query experience across LINQ enabled APIs and allows you to combine XML queries and transforms with queries from other data sources. Isto proporciona uma experiência mais “amigável” em toda a consulta LINQ. Ele também permite que você combine consultas de XML com consultas de outras fontes de dados. We will go in more depth on LINQ to XML’s query capability in the section titled " Querying XML With LINQ to XML ." Veja ->  "Busca XML com LINQ para XML."

 

Criando um simples método para inserir mais um elemento(ITEM) no Sistema.

            XElement _xml = XElement.Load("Caminho do Arquivo XML");

            XElement element = null;

            element = new XElement("ITEM", new XComment("Criado em :" + DateTime.Now.ToString()));

            element.SetAttributeValue("ID", "valor Atributo");

            element.SetValue("valor elemento"););

            _xml.Add(element);

            _xml.Save("Caminho do Arquivo XML");

 

Repare que apenas com algumas linhas de comando, inserimos uma nova linha no nosso arquivo XML.

O  XElement representa um elemento do XML, o mesmo possui um método chamado Load() neste método indicamos qual é o caminho do arquivo que deverá ser lido. O XComment, cria comentários dentro do elemento, neste caso para cada linha inserida estamos colocando um comentário que informa a data de criação da mesma. O método SetAttributeValue é reponsável por inserir um valor em um determinado atribui, já o SetValue() é reponsável por inserir um valor no elemento, finalizando, inserimos o elemento no arquivo com o método Add e salvamos o mesmo através do método Save().

Você pode montar algumas consultas para visualizar os elementos e atributos do XML, veja abaixo um exemplo:

//Mostra todos os elementos

foreach (var item in enumerable)

     MessageBox.Show(item);

 

//Ver todos os atributos ID

foreach (var item in enumerable.Attributes("ID"))

     MessageBox.Show(item);

 

//Ver todos os elementos

foreach (var item in enumerable.Elements())

     MessageBox.Show(item);

 

E como eu faria para alterar um item do XML ?

Para isso veja o código abaixo:

XElement _xml = XElement.Load("Caminho do arquivo");

IEnumerable<XElement> elements = _xml.Elements();

 

//Alterando um elemento

foreach (var item in elements.Elements("Nome do Elemento").Where(ePredicate => ePredicate.Name == "Nome"))

            item.Value = "Valor do elemento alterado";

 

//Alterando um atributo

foreach (var item in elements.Attributes("Nome do Atributo").Where(ePredicate => ePredicate == "Nome"))

         item.Value = "Valor do atributo Alterado";

 

//Salva Alterações

_xml.Save(path);

 

Repare que para buscar os objetos que serão alterados estou fazendo uso da classe Where() passando um método anônimo (Lambda Expression) onde indico que quer buscar um(ns) objetos de acordo com minha condição.

 E  para excluir ?

//Exclui elemento de acordo com a condição Where(valor do elemento)

elements.AncestorsAndSelf("Cliente").Where(e => e.Value == "Valor Elemeto").Remove();

 

//Exclui elemento de acordo com a condição (Valor e Nome do atriuto)

elements.AncestorsAndSelf("Elemento").Where(e => e.Attribute("Nome Atributo").Value == "Valor Atributo").Remove();

 

  

Vou deixar disponível um pequeno exemplo que montei, para quem se interessar, ->  Clique aqui para Baixar Exemplo.

 Mais referências:

Trabalhando com Linq
http://nelsonborgesjr.spaces.live.com/blog/cns!A1C7FFFCFB9D3EE5!279.entry

Linq
http://msdn.microsoft.com/en-us/library/bb308959.aspx
http://msdn.microsoft.com/en-us/netframework/aa904594.aspx

 

Abraço e bom final de semana.

 

Nelson Borges

 

Categorias:Ado.Net
  1. Nenhum comentário ainda.
  1. No trackbacks yet.

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: