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","[email protected]")
),
//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", "[email protected]")
)
));
//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.