العمل مع XML في C# (.NET): دليل شامل للمبتدئين

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

العمل مع XML في C# (.NET): دليل شامل



XML (لغة الترميز القابلة للتوسع) لا يزال أحد التنسيقات الرئيسية لتخزين ونقل البيانات المنظمة في نظام .NET البيئي. في C#، تتوفر عدة أدوات قوية للعمل مع XML: من XmlDocument الكلاسيكي إلى XDocument الحديث من LINQ to XML والتسلسل المتقدم عبر XmlSerializer. في هذه المقالة، سنستعرض جميع الأساليب الأساسية مع أمثلة عملية.



1. الأسلوب الكلاسيكي: XmlDocument



System.Xml.XmlDocument هو نموذج DOM (نموذج كائن المستند) الذي يقوم بتحميل مستند XML بالكامل في الذاكرة على شكل شجرة من العقد. هذا الأسلوب مألوف للمطورين منذ أيام .NET Framework 1.0.



تحميل وقراءة XML



using System.Xml;

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

// الحصول على العنصر الجذرXmlElement root = doc.DocumentElement;

// اجتياز جميع العقد الفرعيةforeach (XmlNode node in root.ChildNodes){ if (node.Name == "book") { string title = node["title"]?.InnerText; string author = node["author"]?.InnerText; Console.WriteLine($"الكتاب: {title}, المؤلف: {author}"); }}


إنشاء وكتابة 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 = "السيد ومارجريتا";book.AppendChild(title);

newDoc.Save("library.xml");


المزايا: البساطة، دعم XPath، تحكم كامل في DOM.
العيوب: يستهلك ذاكرة كبيرة، لا يدعم LINQ.



2. الأسلوب الحديث: LINQ to XML (XDocument)



بدءًا من .NET 3.5، يُوصى باستخدام مساحة الأسماء System.Xml.Linq. توفر الفئات XDocument وXElement وXAttribute واجهة برمجة تطبيقات أخف وأكثر وظيفية مع تكامل كامل مع LINQ.



قراءة XML باستخدام 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})");}


إنشاء XML باستخدام XElement



XDocument xdoc = new XDocument(    new XElement("library",        new XElement("book",            new XElement("title", "الجريمة والعقاب"),            new XElement("author", "ف.م. دوستويفسكي"),            new XAttribute("id", "1")        )    ));

xdoc.Save("library2.xml");


المزايا: بناء جملة موجز، دعم LINQ، استهلاك أقل للذاكرة.
العيوب: قد يكون غير مألوف للمطورين المعتادين على DOM.



3. تسلسل الكائنات إلى XML: XmlSerializer



إذا كان لديك فئات C#، يمكنك تحويلها تلقائيًا إلى XML والعكس باستخدام System.Xml.Serialization.XmlSerializer.



مثال لفئة للتسلسل



[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; }}


التسلسل (كائن → XML)



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

Book book = new Book { Id = 1, Title = "الحرب والسلام", Author = "ل.ن. تولستوي" };

XmlSeria

توصيات