Criando documentos XML
Para criar um arquivo XML vamos utilizar a classe XElement .Todos os atributos e elementos serão criados com os métodos SetAttributeValue e SetElementValue, para salvar o arquivo a classe disponibiliza o método Save.
Conforme o código abaixo adicione o método CriaXML
private void CriaXML()
{
XElement xml = new XElement("Clientes",
new XElement("Cliente",
new XAttribute("CliID", "1"),
new XElement("Nome", "Fabiano Belmonte"),
new XElement("Email", "fbelmonte@etniax.com.br")
),
new XElement("Cliente",
new XAttribute("CliID", "2"),
new XElement("Nome", "Juca das Neves"),
new XElement("Email", "juca@bol.com.br")
)
);
xml.Save("c:\\xmlClientes.xml");
}
Veja o Resultado:
<?xml version="1.0" encoding="utf-8"?>
<Clientes>
<Cliente CliID="1">
<Nome>Fabiano Belmonte</Nome>
<Email>fbelmonte@etniax.com.br</Email>
</Cliente>
<Cliente CliID="2">
<Nome>Juca das Neves</Nome>
<Email>juca@bol.com.br</Email>
</Cliente>
</Clientes>
Como e simples criar um arquivo XML e salva-lo no disco, note que não precisamos de nenhum outro namespace fizemos tudo pelo System.Xml.LINQ
Para carregar e selecionar valores utilizando Linq to XML podemos utilizar a classe XElement. Método Load: carregar conteúdo XML de um arquivo ou da memórias, em uma de suas sobrecargas podemos passar o caminho do arquivo XML , as outras sobrecargas recebe como parâmetros um objeto TextReader ou XmlReader.Você também pode definir opções à partir do enum LoadOptions.
O LoadOption possui quatro opções . None : todas as linhas desnecessárias,linhas em branco e linhas de informações, do arquivo XML não serão carregadas. PreserveWhitespace: essa opção define que todas as linhas em branco do arquivo XML serão preservadas. SetBaseUri : essa opção define o preenchimento da propriedade BaseUri. SetLineInfo: essa opção habilita o preenchimento da das informações de linha, essa informações pode ser recuperadas através da interface IXmlLineInfo.
Conforme código abaixo adicione o método CarregaXml
private void CarregaXml()
{
XElement xml = XElement.Load("c:\\xmlClientes.xml", LoadOptions.SetBaseUri | LoadOptions.SetLineInfo);
//Mostra o caminho base.
Response.Write("Caminho :" + xml.BaseUri);
//Mostra informações de linha
IXmlLineInfo lineInfo = xml as IXmlLineInfo;
Response.Write(" <br> LineNumber " + lineInfo.LineNumber + "e LinePosition: " + lineInfo.LinePosition);
//Carrega todos os elementos dentro do elemento root
IEnumerable<XElement> enumerable = xml.Elements();
//Mostra todos os elementos dentro do elemento root
Response.Write("<br> Mostra todos os elementos dentro do elemento root <br>");
foreach (var item in enumerable)
Response.Write(item + "<br>");
//Mostra todos os atributos nome do elento Cliente
Response.Write("<br> Mostra todos os atributos nome do elento Cliente <br>");
foreach (var item in enumerable.Attributes("CliID"))
Response.Write(item + "<br>");
//Mostra todos os elementos CPF dentro do elemento Cliente
Response.Write(" <br> Mostra todos os elementos Email dentro do elemento Cliente <br> ");
foreach (var item in enumerable.Elements("Email"))
Response.Write(item + "<br>");
}
Para isso utilizamos todo o poder do Linq para selecionar o atributo ou elemento que desejamos alterar.
Conforme o código abaixo adicione o método AlterandoValores
private void AlterandoValores()
{
XElement xml = XElement.Load("c:\\xmlClientes.xml", LoadOptions.SetBaseUri | LoadOptions.SetLineInfo);
IEnumerable<XElement> elements = xml.Elements();
foreach (var item in elements.Elements("Nome").Where(e => e.Value == "Fabiano Belmonte"))
item.Value = "Adriano Jose";
foreach (var item in elements.Attributes("CliID").Where(e => e.Value == "1"))
item.Value = "12";
//Salva Alterações
xml.Save("c:\\xmlClientes.xml");
}
Excluindo Valores
Agora vamos excluir um elemento de dentro de um XML, utilizaremos o mesmo conceito onde retiramos um elemento que possua o atributo passado veja como e simples.
Conforme o código abaixo adicione o método ExcluindoValores
private void ExcluindoValores()
{
XElement xml = XElement.Load("c:\\xmlClientes.xml", LoadOptions.SetBaseUri | LoadOptions.SetLineInfo);
IEnumerable<XElement> elements = xml.Elements();
elements.AncestorsAndSelf("Cliente").Where(e => e.Attribute("CliID").Value == "2").Remove();
//Salva Alterações
xml.Save("c:\\xmlClientes.xml");
}
Para inserir elementos em um XML, também e muito simples precisamos primeiramente fazer o load no XML, em seguida criar um novo elemento e adicionar no XML Conforme o código abaixo adicione o método InsereElemento
private void InsereElemento()
{
XElement xml = XElement.Load("c:\\xmlClientes.xml", LoadOptions.SetBaseUri | LoadOptions.SetLineInfo);
XElement Newxml = new XElement(
new XElement("Cliente",
new XAttribute("CliID", "2"),
new XElement("Nome", "Juca das Neves"),
new XElement("Email", "juca@bol.com.br")
)
);
xml.Add(Newxml);
xml.Save("c:\\xmlClientes.xml");
}
E isso pessoal com estes exemplos realizamos quase todas operações básicas com o LINQ.XML, com isso conseguimos ter uma idéia de o quanto e simples e fácil trabalhar com este novo elemento da FrameWork 3.5.
Espero ter ajudado.
Bons Códigos...