السلام عليكم و رحمة الله تعالى و بركاته,,,
في هذا الموضوع, إن شاء الله, سنتكلم عن طريقة سهلة و بسيطة لتسجيل و حفظ المعلومات بصيغة XML. لماذا XML؟ فقط لبساطتها, فعاليتها, سهولة ارسال ملفات XMLعبر الشبكات و الأنظمة التي أصبحت كلهما مدعمة لها و خصوصا الدعم الكبير للغة XML من طرف إطار الدوت نت عبر الكثير من الفئات كـ XmlDocument و XmlElement و XmlNode التي سنتكلم عنها لاحقا. و قبل الدخول في صلب الموضوع, هذا رابط به تعريفات للغة (Extensible Markup Language) XML. و طبعا هذا رابط به مبادئ لغة XML.
لصياغة مستند XML انطلاقا من معلومات أيا كانت, نحتاج أولا للفئة XmlDocument التي تمثل مستند XML و تمكن من تحرير المستند بزيادة عناصر XmlElement إليه. كل عنصر يمكن أن يحتوي على عقدة أو أكثر و هذه العقد يمكن أن تحتوي هي الأخرى على عقد مما يسهل صياغة الأشجار بسهولة مع XML. عقد XML تمثلها الفئة XmlNode. المستند الذي سنقوم بصياغته في هذا المشروع سيمثل مذكرة إلى الموظفين في شركة ما. المعلومات التي ستكون هذه المذكرة هي : التاريخ, مرسل المذكرة, مستقبلها, عنوانها و أخيرا نص المذكرة. محتوى المذكرة كما هو مبين في الصورة أذناه :
صياغة محتوى المذكرة :
نحتاج إلى تعريف كائن من نوع XmlDocument الذي سيمثل مستند XML النهائي.
XmlDocument doc = new XmlDocument();
بعد ذلك سنحتاج إلى تعريف عنصر XML عن طريق كائن من نوع XmlElement الذي سيحتوي العقد التي تمثل معلومات المذكرة. بهذه الطريقة يمكننا تظمين العديد من المذكرات في مستند XML واحد.
XmlElement el = doc.CreateElement("Note");بعد ذلك سنقوم بإنشاء عقد XML و كل عقدة ستحتوي على معلومة من معلومات المذكرة. عقد XML ممثلة في إطار الدوت نت بالفئة XmlNode التي نحتاج لإنشاء كائن لكل عقدة.
XmlNode node = doc.CreateNode(XmlNodeType.Element, "Date", ""); node.InnerText = dateTimePicker.Value.ToShortDateString(); el.AppendChild(node);
الجملة الأولى تنشئ لنا عقدة XML اسمها Date معدة لتمثيل تاريخ إرسال المذكرة. الجملة الثانية نحدد من خلالها محتوى العقدة و الذي هو تاريخ إرسال المذكرة. الجملة الثالثة تمكننا من زيادة العقدة داخل العنصر XML الممثل للمذكرة الذي هو من نوع XmlElement. لاحظوا معي أن الكائن من فئة XmlDocument هو الذي ينشئ عناصر و عقد Xml. لعدم الإطالة, لن نقوم باستعراض كود إنشاء عقد المعلومات الأخرى لأنها تنشئ بنفس الطريقة, ما يتغير هو الاسم و المحتوى فقط.
و أخيرا, نقوم بزيادة الكائن el إلى مستند XML ليتكون عندنا مستند من مذكرة واحدة. يمكن لنا زيادة مذكرات أخرى بنفس الطريقة بزيادة العناصر إلى نفس المستند. عندما ننتهي, نحصل على مستند XML جاهز للحفظ. للحصول على نص XML للمستند الذي حصلنا عليه نستعمل الخاصية OuterXml للكائن doc حيث يمكننا إظهاره على مربع أو كتابته على ملف. لكتابة محتوى مستند XML مباشرة على ملف, نستعمل الدالتين WriteContentTo و WriteTo.
هذا هو نص XML الذي سنحصل عليه من الكود المرفق مع هذا الموضوع :
<Note> <Date>27/08/2009</Date> <From>محمد رضى</From> <To>باقي الأعضاء</To> <Title>أهلا و سهلا</Title> <Body>تحيتكم سلام و بعد...</Body> </Note>
قراءة محتوى المذكرة :
بعد أن تعلمنا كيف نحفظ معلومات داخل مستند XML, سنتعلم الآن كيف نقوم بقراءة محتوى مستند XML و في حالتنا هذه قراءة محتوى المذكرة. للقراءة كما للكتابة, نحتاج دائما إلى إنشاء كائن من نوع XmlDocument :
XmlDocument doc = new XmlDocument();
بعد ذلك نحتاج إلى تحميل نص XML إلى الكائن doc :
doc.LoadXml(xmlTextBox.Text);
لأنه في الواقع العملي, أغلب مستندات XML تكون بصيغة شجرة فطريقة تحديد العنصر الذي نريد الوصول إليه لقراءة محتواه تتم بنفس الطريقة. هذا يعني أنه في مستند XML به العديد من العناصر و العقد, سنحتاج إلى تحديد مسار العنصر الذي نريد الوصول إليه. في حالتنا هذه المستند بسيط للغاية و به عنصر واحد فمسار هذا العنصر بالطبع هو /Note ونصل إليه بالطريقة التالية :
XmlNode node = doc.SelectSingleNode("/Note");الآن, لدينا العقدة node التي سنجد بداخلها عقد محتويات المذكرة. للحصول مثلا على تاريخ المذكرة نصل إلى العقدة المسماة Date و نستعلم الخاصية InnerText بالشكل التالي :
dateTimePicker.Value = DateTime.Parse(node.SelectSingleNode("Date").InnerText);لقراءة باقي محتويات المذكرة نقوم بالوصول إلى عقدة المحتوى عبر اسمها بالمناداة على الدالة SelectSingleNode التي ترجع لنا كائن XmlNode به كل المعلومات عن العقدة المطلوبة.
كانت هذه مقدمة مبسطة في إنشاء و قراءة نصوص XML. لغة XML كبيرة, متنوعة لن يستطيع موضوع الإحاطة بكل جوانبها. أتمنى أن تكون هذه المقدمة بداية لاستعمال مستندات XML في مشروعاتنا. مستند XML يمكن أن يمثل أي بنية بيانات و يمكن أن يحتوي على ملفات و حتى تمثيل شجرة القرص الصلب إضافة إلى الإمكانيات التي ذكرتها في أول الموضوع.
في الملف المرفق ستجدون برنامجا صغيرا يسجل محتوى مذكرة بصيغة XML و يقرء محتواها من نص XML.
تحياتي...