C# LINQ to XML – jak wygenerować XML z CSV (XDocument)
Potrzebujesz przekształcić dane z CSV do XML w C#?
W tym artykule pokażę, jak wykorzystać LINQ to XML, aby w prosty i kontrolowany sposób generować strukturę XML przy użyciu XDocument i XElement.
To podejście świetnie sprawdza się w integracjach systemów, eksportach danych oraz scenariuszach ETL.
📌 Czym jest LINQ to XML i kiedy go używać?
LINQ to XML to API dostępne w .NET (System.Xml.Linq), które pozwala tworzyć i manipulować XML-em w sposób deklaratywny.
Kiedy warto używać?
- integracje z systemami zewnętrznymi (SOAP, B2B)
- eksport danych (np. do hurtowni danych)
- transformacje danych (CSV → XML)
- generowanie dynamicznych dokumentów XML
Kiedy NIE?
- bardzo duże pliki (problem z pamięcią)
- streaming danych → wtedy lepszy
XmlReader/XmlWriter
🏗️ Scenariusz: CSV → XML w C#
Założenie:
Masz dane w CSV (np. samochody) i chcesz wygenerować XML:
<Samochody>
<Samochod>
<Model>Prius</Model>
<SpalanieAutostrada>5</SpalanieAutostrada>
</Samochod>
</Samochody>
🧱 Tworzenie XML krok po kroku (XDocument)

1. Dodanie przestrzeni nazw
using System.Xml.Linq;
2. Utworzenie dokumentu XML
var dokument = new XDocument();
👉 Tworzysz pusty dokument, do którego będziesz dodawał elementy.
3. Element główny
var samochody = new XElement("Samochody");
👉 To root Twojego XML-a.
4. Iteracja po danych (foreach)
foreach (var rekord in rekordy)
{
var samochod = new XElement("Samochod");
var model = new XElement("Model", rekord.Model);
var spalanieAutostrada = new XElement("SpalanieAutostrada", rekord.SpalanieAutostrada);
samochod.Add(model);
samochod.Add(spalanieAutostrada);
samochody.Add(samochod);
}
Co tu się dzieje?
XElementautomatycznie konwertuje typy (int → string)- budujesz strukturę imperatywnie (krok po kroku)
- masz pełną kontrolę nad XML
5. Dodanie roota do dokumentu
dokument.Add(samochody);
6. Zapis do pliku
dokument.Save("paliwo.xml");
👉 Domyślnie zapisze do katalogu bin/Debug

⚡ Alternatywa: podejście deklaratywne (LINQ style)
W produkcji często lepsze:
var dokument = new XDocument(
new XElement("Samochody",
rekordy.Select(rekord =>
new XElement("Samochod",
new XElement("Model", rekord.Model),
new XElement("SpalanieAutostrada", rekord.SpalanieAutostrada)
)
)
)
);
✅ Zalety
- mniej kodu
- bardziej czytelne dla doświadczonych devów
❌ Wady
- trudniejsze do debugowania
- mniej “step-by-step” dla juniorów
🆚 Elementy vs Atrybuty – co wybrać?

✔ Elementy (zalecane na start)
<Model>Prius</Model>
Plusy:
- łatwiejsze rozszerzanie
- lepsza czytelność
- bardziej “future-proof”
✔ Atrybuty
<Samochod Model="Prius" />
Plusy:
- krótszy zapis
- dobre dla prostych danych
📌 Best Practice
👉 Jeśli nie masz constraintów:
zacznij od elementów
⚠️ Performance – ważny edge case

LINQ to XML:
- ładuje cały dokument do pamięci ❗
- nie nadaje się do dużych plików
Alternatywa:
XmlWriter→ zapis strumieniowyXmlReader→ odczyt strumieniowy
🧩 Clean Architecture – gdzie to umieścić?

Nie wrzucaj tego do Main w realnym projekcie.
✔ Poprawne podejście:
public interface IXmlExporter
{
void Export(IEnumerable<Car> cars);
}
public class XmlExporter : IXmlExporter
{
public void Export(IEnumerable<Car> cars)
{
var doc = new XDocument(
new XElement("Samochody",
cars.Select(c =>
new XElement("Samochod",
new XElement("Model", c.Model)
)
)
)
);
doc.Save("paliwo.xml");
}
}
📌 Dlaczego?
- separacja odpowiedzialności
- testowalność
- łatwa wymiana implementacji
✅ Checklist – co zapamiętać
XDocument= cały dokumentXElement= pojedynczy element- LINQ to XML = wygoda + czytelność
- duże pliki → użyj
XmlWriter - trzymaj to w Infrastructure
- elementy > atrybuty (na start)
🔗 Zobacz też
- C# Podstawy Programowania: Twój Pierwszy Krok w Świat Kodowania
- AI w .NET: Zostań Architektem Inteligentnych Aplikacji!
- C# Clean Architecture w Praktyce
- C# – Zbuduj Własnego Tetrisa! Kompletny Przewodnik
- 7 Dniowe Wyzwanie C# Tic Tac Toe
- C# Zbuduj Profesjonalny Portal Randkowy od Podstaw!
📣 Call To Action
Jeśli materiał był pomocny:
👉 zostaw komentarz – jak używasz XML w swoich projektach
👉 sprawdź inne artykuły o .NET i architekturze
Zobacz także — powiązane artykuły
👉 Tworzenie klas i obiektów w C# — kompletny przewodnik
👉LINQ w C# — przetwarzanie kolekcji bez pętli – zobacz w kursie LINQ w C# -czytelny kod, wydajne zapytania
👉 Typy wartościowe vs referencyjne w C# — jak działa pamięć – zobacz w kursie C# Podstawy Programowania: Twój Pierwszy Krok w Świat Kodowania
Dołącz do Listy VIP
I otrzymaj roadmapę Junior .NET Developer oraz najlepszą ofertę, gdy tylko ruszą zapisy!!!

