Trabalhando com XML em C# (.NET): Guia Completo para Iniciantes

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

Trabalhando com XML em C# (.NET): Guia Completo



XML (Extensible Markup Language) continua sendo um dos principais formatos para armazenamento e transmissão de dados estruturados no ecossistema .NET. Em C#, existem várias ferramentas poderosas para trabalhar com XML: desde o clássico XmlDocument até o moderno XDocument do LINQ to XML e a serialização avançada com XmlSerializer. Neste artigo, abordaremos todas as principais abordagens com exemplos práticos.



1. Abordagem clássica: XmlDocument



System.Xml.XmlDocument é um modelo DOM (Document Object Model) que carrega todo o documento XML na memória como uma árvore de nós. Essa abordagem é familiar para desenvolvedores desde os tempos do .NET Framework 1.0.



Carregando e lendo XML



using System.Xml;

XmlDocument doc = new XmlDocument();doc.Load("books.xml");

// Obtém o elemento raizXmlElement root = doc.DocumentElement;

// Percorre todos os nós filhosforeach (XmlNode node in root.ChildNodes){ if (node.Name == "book") { string title = node["title"]?.InnerText; string author = node["author"]?.InnerText; Console.WriteLine($"Livro: {title}, Autor: {author}"); }}


Criando e escrevendo XML



XmlDocument newDoc = new XmlDocument();XmlElement rootElem = newDoc.CreateElement("library");newDoc.AppendChild(rootElem);

XmlElement book = newDoc.CreateElement("book");rootElem.AppendChild(book);

XmlElement title = newDoc.CreateElement("title");title.InnerText = "O Mestre e Margarida";book.AppendChild(title);

newDoc.Save("library.xml");


Vantagens: Simplicidade, suporte a XPath, controle total sobre o DOM.
Desvantagens: Consome muita memória, sem suporte a LINQ.



2. Abordagem moderna: LINQ to XML (XDocument)



A partir do .NET 3.5, recomenda-se usar o namespace System.Xml.Linq. As classes XDocument, XElement e XAttribute fornecem uma API mais leve e funcional com integração total ao LINQ.



Lendo XML com XDocument



using System.Xml.Linq;

XDocument xdoc = XDocument.Load("books.xml");

var books = xdoc.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.Author} ({book.Year})");}


Criando XML com XElement



XDocument xdoc = new XDocument(    new XElement("library",        new XElement("book",            new XElement("title", "Crime e Castigo"),            new XElement("author", "F.M. Dostoiévski"),            new XAttribute("id", "1")        )    ));

xdoc.Save("library2.xml");


Vantagens: Sintaxe concisa, suporte a LINQ, menor consumo de memória.
Desvantagens: Pode ser incomum para desenvolvedores acostumados com DOM.



3. Serialização de objetos em XML: XmlSerializer



Se você tem classes C#, pode convertê-las automaticamente para XML e vice-versa usando System.Xml.Serialization.XmlSerializer.



Exemplo de classe para serialização



[Serializable]public class Book{    [XmlAttribute("id")]    public int Id { get; set; }

[XmlElement("title")] public string Title { get; set; }

[XmlElement("author")] public string Author { get; set; }

[XmlIgnore] public string InternalNote { get; set; }}


Serialização (objeto → XML)



using System.Xml.Serialization;using System.IO;

Book book = new Book { Id = 1, Title = "Guerra e Paz", Author = "L.N. Tolstói" };

XmlSeria

Recommendations