العمل مع XML في C# (.NET): دليل شامل للتحليل والإنشاء

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

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

ابدأ الدورة

العمل مع XML في C# (.NET): من الأساسيات إلى التقنيات المتقدمة



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



1. XmlDocument الكلاسيكي (نموذج DOM)



الفئة System.Xml.XmlDocument تطبق نموذج كائن المستند (DOM) — حيث تقوم بتحميل مستند XML بالكامل إلى الذاكرة العشوائية على شكل شجرة من العقد. هذا مناسب للمستندات الصغيرة والمتوسطة الحجم عندما تكون هناك حاجة للتنقل والتعديل المتكرر.



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

using System.Xml;

XmlDocument doc = new XmlDocument();doc.Load("books.xml"); // تحميل من ملف

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

// اختيار جميع عناصر bookXmlNodeList books = root.SelectNodes("//book");foreach (XmlNode book in books){ string title = book["title"].InnerText; string author = book["author"].InnerText; Console.WriteLine($"{title} — {author}");}


إنشاء وحفظ 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 = "الحرب والسلام";book.AppendChild(title);

root.AppendChild(book);doc.Save("library.xml");


2. LINQ to XML الحديث (XDocument)



مساحة الأسماء System.Xml.Linq تقدم واجهة برمجة تطبيقات أكثر إيجازًا ووظيفية. XDocument و XElement تسمح بكتابة كود بأسلوب LINQ، وهو مناسب بشكل خاص للاستعلامات والتحويلات.



التحليل باستخدام 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})");}


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

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


مزايا XDocument:

  • دعم استعلامات LINQ لتصفية وإسقاط البيانات.
  • صيغة أكثر قابلية للقراءة لإنشاء العناصر من خلال المنشئات المتداخلة.
  • معالجة تلقائية لمساحات الأسماء عبر XNamespace.


3. المعالجة التدفقية: XmlReader و XmlWriter



للعمل مع ملفات XML كبيرة (مئات الميغابايت أو الجيجابايت)، قد يؤدي استخدام XmlDocument أو XDocument إلى تجاوز الذاكرة. في هذه الحالات، يتم استخدام الفئات التدفقية XmlReader و XmlWriter، التي تعالج البيانات بشكل تسلسلي دون تحميل المستند بالكامل.



القراءة باستخدام XmlReader

using (XmlReader reader = XmlReader.Create("large.xml")){    while (reader.Read())    {        if (reader.NodeType == XmlNodeType.Element && reader.Name == "record")        {            string id = reader.Get                    

توصيات