por Cesar Cassiano Schimanco

Gerar e salvar XML com LINQ - XDocument

Neste artigo vamos ver como criar um XML usando o XDocument.
Não vou me estender muito com explicações, até porque o código está todo comentado e talvez esta seja uma das formas mais simples de gerar um arquivo XML.
Se quiser saber mais, pode ver outras 3 formas de criar e salvar arquivo XML, e se quiser entender mais sobre leitura de XML pode ver este artigo: Ler arquivo XML usando XmlTextReader e XmlDocument em C# - ASP.NET

 

Exemplo de como gerar e salvar um arquivo XML com LINQ to XML.

//Novo documento
XDocument doc = new XDocument();
//Adicionar comentário 'Início'
doc.Add(new XComment("Início"));
//Adicionar a tag raiz
doc.Add(new XElement("contatos",
    //Inicia o elemento "contato"
    new XElement("contato",
        //Adicionar o elemento "nome"
        new XElement("nome","Exemplo1",
            //Adicionar um atributo ao elemento "nome"
            new XAttribute("atributo1","valor1")),
        //Adicionar o elemento "email"
        new XElement("email","exemplo1@cbsa.com.br")
        ),
    //Inicia o elemento "contato"
    new XElement("contato",
        //Adicionar o elemento "nome"
        new XElement("nome", "Exemplo2",
            //Adicionar um atributo ao elemento "nome"
            new XAttribute("atributo2", "valor2")),
        //Adicionar o elemento "email"
        new XElement("email", "exemplo2@cbsa.com.br")
        )
    ));
//Adicionar comentário 'Fim'
doc.Add(new XComment("Fim"));

//Salvar o arquivo
doc.Save(MapPath("~/exemplo.xml"));

 

Abaixo alguns exemplos de como ler arquivo XML com LINQ.

Pegar o elemento que tiver o atributo = valor2.

//Carregar o arquivo XML
XElement xml = XElement.Load(MapPath("~/exemplo.xml"));
//Fazer a consulta
IEnumerable<XElement> contatos =
    from el in xml.Elements("contato").Elements("nome")
    //Filtro para verificar se o "atributo" não é null e se é = valor2
    where el.Attribute("atributo") != null && el.Attribute("atributo").Value == "valor2"
    select el;
//Responder na tela os itens encontrados
foreach (XElement el in contatos)
    Response.Write(el.Value);

 

Pegar apenas os elementos "nome".

//Carregar o arquivo XML
XElement xml2 = XElement.Load(MapPath("~/exemplo.xml"));
//Fazer a consulta
IEnumerable<XElement> contatos2 =
    from el in xml2.Elements("contato")
    //Filtro para pegar todos os Elementos "nome"
    where el.Elements("nome") != null
    select el;
//Responder na tela os itens encontrados
foreach (XElement el in contatos2)
    Response.Write(el.Value);

Ler XML com XNamespace.

//Ler XML com Namespace
//Carregar o arquivo XML
XElement root2 = XElement.Load(MapPath("~/exemplo2.xml"));
//Pega o Namespace declarado no arquivo XML
XNamespace xnamespace = root2.GetDefaultNamespace();
//Para definir o namespace manualmente basta usar a linha abaixo
//XNamespace xnamespace = "http://www.w3.org/2000/xmlns";

//Fazer a consulta
IEnumerable<XElement> address2 =
from el in root2.Elements(xnamespace + "contato").Elements(xnamespace + "nome")
where (string)el.Attribute("atributo") == "valor2"
select el;
//Responder na tela os itens encontrados
foreach (XElement el in address2)
    Response.Write(el.Value);

 

Caso ocora o erro "Select" ou "Where" not found você pode acessar este artigo aqui.

Download dos exemplos aqui.

Comentários

Carregando comentários

Postar um novo comentário



Processando...