Trabalho com XML em C# (.NET): guia completo para análise e criação

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

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                    

Recommendations