Trabalho com XML em C# (.NET): do básico às técnicas avançadas
XML (eXtensible Markup Language) continua sendo um dos principais formatos para armazenamento e transmissão de dados estruturados no ecossistema .NET. Independentemente de você estar criando arquivos de configuração, trocando dados com serviços web ou processando documentos, as ferramentas integradas do C# oferecem recursos flexíveis e eficientes para trabalhar com XML. Neste artigo, abordaremos três abordagens principais: o clássico XmlDocument, o moderno XDocument (LINQ to XML) e o baseado em fluxo XmlReader/XmlWriter.
1. Clássico XmlDocument (modelo DOM)
A classe System.Xml.XmlDocument implementa o DOM (Document Object Model) — carrega todo o documento XML na memória RAM como uma árvore de nós. Isso é conveniente para documentos pequenos e médios, quando é necessária navegação e modificação frequentes.
Carregamento e leitura de XML
using System.Xml;
XmlDocument doc = new XmlDocument();doc.Load("books.xml"); // carregamento do arquivo
// Obtendo o elemento raizXmlElement root = doc.DocumentElement;
// Selecionando todos os elementos bookXmlNodeList books = root.SelectNodes("//book");foreach (XmlNode book in books){ string title = book["title"].InnerText; string author = book["author"].InnerText; Console.WriteLine($"{title} — {author}");}Criação e salvamento de XML
XmlDocument doc = new XmlDocument();XmlElement root = doc.CreateElement("library");doc.AppendChild(root);
XmlElement book = doc.CreateElement("book");book.SetAttribute("id", "1");
XmlElement title = doc.CreateElement("title");title.InnerText = "Guerra e Paz";book.AppendChild(title);
root.AppendChild(book);doc.Save("library.xml");2. Moderno LINQ to XML (XDocument)
O namespace System.Xml.Linq oferece uma API mais concisa e funcional. XDocument e XElement permitem escrever código no estilo LINQ, o que é especialmente conveniente para consultas e transformações.
Análise com XDocument
using System.Xml.Linq;
XDocument doc = XDocument.Load("books.xml");
var books = doc.Descendants("book") .Select(b => new { Title = b.Element("title")?.Value, Author = b.Element("author")?.Value, Year = (int)b.Element("year") });
foreach (var book in books){ Console.WriteLine($"{book.Title} ({book.Year})");}Criação de XML com construtores
XDocument doc = new XDocument( new XElement("library", new XElement("book", new XAttribute("id", "1"), new XElement("title", "Crime e Castigo"), new XElement("author", "F.M. Dostoiévski") ) ));doc.Save("library.xml");Vantagens do XDocument:
- Suporte a consultas LINQ para filtragem e projeção de dados.
- Sintaxe mais legível para criação de elementos através de construtores aninhados.
- Tratamento automático de namespaces através de
XNamespace.
3. Processamento em fluxo: XmlReader e XmlWriter
Para trabalhar com arquivos XML grandes (centenas de megabytes ou gigabytes), o uso de XmlDocument ou XDocument pode causar estouro de memória. Nesses casos, são utilizadas as classes de fluxo XmlReader e XmlWriter, que processam os dados sequencialmente, sem carregar todo o documento.
Leitura com XmlReader
using (XmlReader reader = XmlReader.Create("large.xml")){ while (reader.Read()) { if (reader.NodeType == XmlNodeType.Element && reader.Name == "record") { string id = reader.Get Também na biblioteca
Java Image I/O API: redimensionamento e corte de imagens | Guia
Spring Data JPA para Java: guia completo com exemplos
Geração de PDF em Kotlin: bibliotecas e ferramentas (iText, Apache PDFBox)