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

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

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

ابدأ الدورة

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



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



1. المكتبات الأساسية للعمل مع XML في .NET



توفر منصة .NET للمطورين عدة واجهات برمجة تطبيقات (API) لمعالجة XML:



  • System.Xml (XmlDocument, XmlReader, XmlWriter) — نهج DOM الكلاسيكي (نموذج كائن المستند). يسمح بتحميل مستند XML بالكامل في الذاكرة والعمل معه كشجرة عقد.
  • LINQ to XML (XDocument, XElement, XAttribute) — واجهة برمجة تطبيقات حديثة، أخف وزناً وأكثر سهولة، متكاملة مع LINQ. يُوصى بها لمعظم المشاريع الجديدة.
  • XmlSerializer — للتسلسل وإلغاء التسلسل التلقائي لكائنات C# إلى XML والعكس.
  • XPath (SelectSingleNode, SelectNodes) — لغة استعلام للتنقل في مستند XML. مدعومة في كل من XmlDocument و XDocument (عبر الامتدادات).


2. LINQ to XML: النهج الحديث



مكتبة System.Xml.Linq (LINQ to XML) هي الخيار المفضل للعمل مع XML في C#. تقدم بناء جملة نظيف، تحميل خفيف، ودعم لاستعلامات LINQ.



إنشاء مستند XML

using System.Xml.Linq;

XDocument doc = new XDocument( new XDeclaration("1.0", "utf-8", "yes"), new XElement("books", new XElement("book", new XAttribute("id", "1"), new XElement("title", "الحرب والسلام"), new XElement("author", "ليو تولستوي"), new XElement("price", 599.99m) ), new XElement("book", new XAttribute("id", "2"), new XElement("title", "الجريمة والعقاب"), new XElement("author", "فيودور دوستويفسكي"), new XElement("price", 450.00m) ) ));

doc.Save("books.xml");


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

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

// الحصول على جميع الكتبvar allBooks = loadedDoc.Descendants("book");

foreach (var book in allBooks){ string id = book.Attribute("id")?.Value; string title = book.Element("title")?.Value; string author = book.Element("author")?.Value; Console.WriteLine($"الكتاب #{id}: {title} — {author}");}


الاستعلامات باستخدام LINQ

// اختيار الكتب التي يزيد سعرها عن 500 روبلvar expensiveBooks = from book in loadedDoc.Descendants("book")                     where (decimal)book.Element("price") > 500                     select new                     {                         Title = (string)book.Element("title"),                         Price = (decimal)book.Element("price")                     };

foreach (var b in expensiveBooks){ Console.WriteLine($"{b.Title}: {b.Price} روبل");}


3. XmlDocument الكلاسيكي



إذا كنت تعمل مع كود قديم أو تحتاج إلى تحكم كامل في DOM، استخدم XmlDocument من مساحة الأسماء System.Xml.



التحميل والتنقل

using System.Xml;

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

XmlNode root = xmlDoc.DocumentElement;XmlNodeList bookNodes = root.SelectNodes("book");

foreach (XmlNode node in bookNodes){ XmlNode titleNode = node.SelectSingleNode("title"); if (titleNode != null) { Console.WriteLine(titleNode.InnerText); }}


إضافة عقدة جديدة

XmlNode newBook = xmlDoc.Cre                    

توصيات