XDocument - Manipulando arquivos XML no .NET
Veja neste artigo uma breve introdução ao XML e como usar o mesmo no .NET, veremos como manipula documentos com este formato.
Um dos formatos de arquivos mais utilizados para armazenamento de informações é, sem dúvidas, o XML, por ser um padrão compatível com a maioria das linguagens comerciais da atualidade. Um exemplo comum disso é a Nota Fiscal Eletrônica, onde os dados são enviados e recebidos neste formato, seguindo o padrão especificado pelos órgãos competentes.
O .NET Framework, como boa ferramenta que é, nos fornece uma série de recursos para trabalhar com esse tipo de arquivo, permitindo importar, exportar e consultar informações no formato XML de forma simples.
Apesar de existir mais de uma classe para esse fim, veremos neste artigo como utilizar a classe XDocument, contida no namespace System.Linq.Xml, para importar, consultar e alterar um arquivo XML de estrutura previamente conhecida.
A Listagem 1 exibe o conteúdo do arquivo pessoas.xml, utilizado nos exemplos deste artigo.
<?xml version="1.0" encoding="UTF-8"?>
<pessoas>
<pessoa id="1" nome="João"/>
<pessoa id="2" nome="Maria"/>
<pessoa id="3" nome="José"/>
</pessoas>
A estrutura é bastante simples, uma vez que objetivo deste artigo é apenas apresentar os principais métodos e propriedades da class supracitada.
Vamos então criar uma aplicação Windows forms e configurar o form principal de forma igual ou semelhante ao que ilustra a Figura 1.
Figura 1: Layout do form principal
Temos um DataGridView (dgvDados) e dois TextBoxes (txtID e txtNome) que serão utilizados para exibição e alteração dos dados.
O botão salvar funcionará da seguinte forma: caso o campo txtID contenha o ID de uma pessoa já cadastrada, o nome desta será alterado, caso contrário, um novo registro será adicionado à lista.
Para manipularmos os itens do arquivo de forma mais clara, usaremos uma classe Pessoa, conforme mostra a Listagem 2.
class Pessoa
{
string id;
string nome;
public string Id
{
get { return id; }
set { id = value; }
}
public string Nome
{
get { return nome; }
set { nome = value; }
}
}
Temos apenas dois campos simples, da mesma forma que no arquivo XML.
Carregando o XML
Carregar o XML é, sem dúvida, a parte mais simples deste artigo. A classe XDocument dispõe de várias formas para realizar esta ação, das quais utilizaremos uma, carregando o documento a partir de seu nome. Primeiramente devemos declarar um objeto XDocument como global, seguindo o exemplo da Listagem 3. Este objeto será instanciado no evento Load do form, visto mais adiante.
XDocument doc;
Escreveremos então um método para carregar este arquivo e montar uma lista de Pessoas e exibir essa lista no grid. Devemos, em seguida, invocar este evento no evento Load do form.
public void CarregarXML()
{
XDocument doc = XDocument.Load(@"C:\pessoas.xml");
List<Pessoa> pessoas = new List<Pessoa>();
foreach (XElement x in doc.Element("pessoas").Elements())
{
Pessoa p = new Pessoa()
{
Id = x.Attribute("id").Value,
Nome = x.Attribute("nome").Value
};
pessoas.Add(p);
}
dgvDados.DataSource = pessoas;
}
Lemos todos os elementos contidos no elemento “pessoas” do XML e, para cada item lido, utilizamos seus atributos para preencher um objeto do tipo Pessoa e adicioná-lo à lista. Ao fim, definimos esta lista como DataSource do grid dgvDados. Com isso, teremos todos os registros listados no grid, como pode ser visto na Figura 2.
Figura 2: Listados os itens do arquivo XML
O próximo passo é programar o evento SelectionChanged do grid para exibir os dados do registro selecionado nos textboxes. A Listagem 4 apresenta o código utilizado para realizar esta ação.
private void dgvDados_SelectionChanged(object sender, EventArgs e)
{
if (dgvDados.SelectedRows.Count > 0)
{
txtId.Text = dgvDados.SelectedCells[0].Value.ToString();
txtNome.Text = dgvDados.SelectedCells[1].Value.ToString();
}
}
É importante que os dados sejam exibidos nos textboxes, pois utilizaremos estes valores para programar o evento Click do botão salvar, o que é mostrado na Listagem 5 a seguir.
Alterando e adicionando elementos
private void button1_Click(object sender, EventArgs e)
{
if (doc.Element("pessoas").Elements().Where(x => x.Attribute("id").Value.Equals(txtId.Text)).Count() > 0)
{
XElement ele = doc.Element("pessoas").Elements().Where(x => x.Attribute("id").Value.Equals(txtId.Text)).First();
ele.Attribute("nome").SetValue(txtNome.Text);
doc.Save(@"C:\pessoas.xml");
CarregarXML();
}
else
{
XElement ele = new XElement("pessoa");
ele.Add(new XAttribute("id", txtId.Text));
ele.Add(new XAttribute("nome", txtNome.Text));
doc.Element("pessoas").Add(ele);
doc.Save(@"C:\pessoas.xml");
CarregarXML();
}
}
Podemos agora executar a aplicação e testar. Primeiramente selecionando uma linha no grid, alterando o nome e então clicando no botão Salvar. O registro selecionado deve ser alterado e o arquivo salvo. Outro teste pode ser realizado digitando um Id inexistente, um Nome e clicando também no botão Salvar. O registro deve ser adicionado à lista e salvo no arquivo.
Como foi visto, manipular arquivos XML torna-se uma tarefa simples quando utilizamos os recursos fornecidos pelo framework. Com algumas poucas linhas de código autodescritivas, pudemos carregar um arquivo XML, alterar e inserir novos elementos e atributos em sua estrutura e salvá-lo ao fim.
Com isso finalizamos este breve artigo. Espero que o conteúdo possa ser útil.
Até a próxima.
Artigos relacionados
-
Artigo
-
Artigo
-
Artigo
-
Artigo
-
Artigo