شرح عملية قراءة ملف الـ XML وعرض محتوياته في أداة DataGridView
صفحة 1 من اصل 1 • شاطر
شرح عملية قراءة ملف الـ XML وعرض محتوياته في أداة DataGridView
بسم الله الرحمن الرحيم
هذا الدرس نقلا عن مدونة دوت نت للمبتدئن
للتعامل مع ملفات الـ XML في الفيجوال ستوديو نحتاج إلى المكتبة System.XML ,, لذلك في البداية نحتاج إلى تضمين هذه المكتبة:
- الكود:
using System.Xml;
Imports System.Xml
تحوي المكتبة System.XML على الكائن XmlDocument الذي يساعدنا على فتح ملف XML وقراءة محتوياته او تعديل محتوياته....ايضاً سنحتاج إلى الكائن XmlElement الذي يمثل عنصر رئيسي او عنصر جذر في ملف الـ XML ,, وايضاً الكائن XMLNode والذي يمثل عنصر فرعي في المستند.
بداية الشرح:
أولاً ,, سيكون لدينا برنامج صغير يقوم بعمليات: الإضافة – الحذف – التعديل على ملف XML , البرنامج يقوم بإنشاء ملف XML لتخزين بيانات شركات ,, بنيته هي كالتالي:
- الكود:
<Companies>
<Company>
<Name>Arab Developers</Name>
<Location>
<Country>Syria</Country>
<City>Damascus</City>
</Location>
<Telephone IsMobile='no'>+963-555-1212</Telephone>
</Company>
</Companies>
كما نرى ان هذا المستند يحوي سجل واحد لشركة, حيث ان العنصر الجذر في هذا المستند هو العنصر Companies اما العنصر Company فهو العنصر الذي يمثل سجل الشركة في هذا المستند اي ان كل سجل لشركة جديدة سيكون اسمه Company.
بيانات الشركة هي: الاسم – الموقع (الدولة – المدينة) – الهاتف (مع خاصية هل الهاتف موبايل).
ملاحظة: لفهم هذا الدرس يجب ان يكون لديك خلفية جيدة حول ملفات XML أو قراءة الدرس: مقدمة في XML.
مفهوم العنصر و العقدة Element & Node:
كما رأينا في الدرس السابق ان مستند XML يتألف من مجموعة من المؤثرات او التاجات Tags والتي يطلق عليها اسم "عناصر" , ومثال على ذلك <Company> … </Company> و <City> … </City> و <Name> … </Name> إلخ ...ولكن في الدوت نت يطلق على العنصر اسمين (XmlElement, XmlNode) اي عنصر او عقدة ...
ومن خلال تجربتي فالمفهومين متشابهين ولا فرق في استخدام اي منهما وحتى لو كان لدينا كائن من نوع XmlElement فببساطة يمكننا تحويله إلى نوع XmlNode ولن يؤثر هذه التحويل على العمل البرمجي ابداً ولذلك اردت التنويه فقط إلى انني سأستخدم كلا المفهومين بالشرح كي تعلم عزيزي القارئ انه لافرق بينهما سواء قلت عقدة أو عنصر.
شرح عملية قراءة ملف الـ XML وعرض محتوياته في أداة DataGridView :
اولاً إنشاء نسخة من الكائن XmlDocument:
- الكود:
XmlDocument doc = new XmlDocument();
Dim doc As New XmlDocument()
فتح الملف بواسطة الإجراء Load والذي يقوم بفتح ملف XML عن طريق تمرير مسار الملف:
- الكود:
doc.Load(Application.StartupPath + @"\testXML.xml");
doc.Load(Application.StartupPath & "\testXML.xml")
توجد طريقة أخرى لقراءة ملف XML وهي XmlReader واستخدام هذا الكلاس يختلف عن استخدام XmlDocument لأن XmlReader يقوم بقراءة الملف عنصر عنصر وهكذا حتى نهاية المستند اي يقرأ بطريقة تسلسلية Sequently عكس الكلاس XmlDocument الذي يقوم بقراءة المستند كاملاً إلى الذاكرة.
ولذلك استخدام اي من الكلاسين يعود للمبرمج حسب احتياجاته فكل طريقة لها مميزات وسلبيات.
الخطوة التالية هي إنشاء نسخة من الكائن XMLElement لكي نقوم بجلب العنصر الجذر في الملف ,, لمعرفة العنصر الجذر نستخدم التابع DocumentElement:
- الكود:
XmlElement RootElement = doc.DocumentElement;
Dim RootElement As XmlElement = doc.DocumentElement
بعد معرفة العنصر الجذر سنقوم بقراءة العناصر الفرعية عنه والتي ستكون كما في مثالنا العنصر <Company> والذي هو يمثل Record اي سجل في الملف و يحوي بداخله بيانات هذا السجل. لذلك يتوجب علينا اولاً عمل حلقة foreach للدوران على العناصر او السجلات الموجودة في الملف:
- الكود:
foreach (XmlNode child in RootElement.ChildNodes)
For Each child As XmlNode In RootElement.ChildNodes
الان لتسهيل العمل سنقوم بإنشاء نسخة من الكائن XmlNode والذي يمثل عقدة أو عنصر فرعي ضمن عنصر رئيسي <Company> لان العنصر <Company> هو يمثل رأس السجل في الملف ,, اذاً نقوم بعمل نسخة من الكائن لكل معلومة على حدى من المعلومات المتعلقة بالشركة.
- الكود:
XmlNode NameNode = child.ChildNodes[0];
XmlNode LocationNode = child.ChildNodes[1];
XmlNode PhoneNode = child.ChildNodes[2];
Dim NameNode As XmlNode = child.ChildNodes(0)
Dim LocationNode As XmlNode = child.ChildNodes(1)
Dim PhoneNode As XmlNode = child.ChildNodes(2)
طبعاً يجب تمرير رقم ترتيب العنصر للخاصية ChildNodes التي ترجع مصفوفة XmlNodeList تضم العناصر الفرعية التي يمثل كل منها معلومة مثل Nameأو Location (طبعاً حسب ترتيبها في الملف كما هو واضح في الكود) , أهم شيء فهم هرمية الملف كي تستطيع استخراج المعلومة الصحيحة فالملف كله عبارة عناصر فرعية (أو أبناء) وعناصر فرعية (أبناء) تابعة لها.
[rtl] [/rtl]
الأن لقراءة خاصية Attribute ضمن العنصر نستخدم في الكود الخاصية Attributes التي ترجع مصفوفة بالخصائص الموجودة ضمن العنصر ,, لقراءة الخاصية المطلوبة نمرر رقم الخاصية او اسمها كما هو بالملف , في مثالنا الخاصية IsMobile موجودة ضمن العنصر Phone :
- الكود:
bool isMobile = (PhoneNode.Attributes["IsMobile"].Value == "no" ? false : true);
Dim isMobile As Boolean = IIf(PhoneNode.Attributes("IsMobile").Value.ToLower() = "no", False, True)
أخيراً بعد تحضير كل شيء بقي إضافة المعلومات إلى الـDataGridView ,, لمعرفة قيمة عنصر نستخدم الخاصية InnerText:
- الكود:
dataGridView1.Rows[rowsCount].Cells[0].Value = NameNode.InnerText;
dataGridView1.Rows[rowsCount].Cells[1].Value = LocationNode.ChildNodes[0].InnerText;
dataGridView1.Rows[rowsCount].Cells[2].Value = LocationNode.ChildNodes[1].InnerText;
dataGridView1.Rows(rowsCount).Cells(0).Value = NameNode.InnerText
dataGridView1.Rows(rowsCount).Cells(1).Value = LocationNode.ChildNodes(0).InnerText
dataGridView1.Rows(rowsCount).Cells(2).Value = LocationNode.ChildNodes(1).InnerText
المبرمج الطموح- الاشراف
- تاريخ التسجيل : 18/02/2011
المساهمات : 207
النقاط : 368
التقيم : 17
الدولة :
الجنس :
رد: شرح عملية قراءة ملف الـ XML وعرض محتوياته في أداة DataGridView
درس ممتاز ....أشكرك اخى الكريم
أبوسجود- ......
- تاريخ التسجيل : 18/02/2011
المساهمات : 101
النقاط : 187
التقيم : 8
الجنس :
| |
صفحة 1 من اصل 1
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى
الأحد مارس 17, 2024 1:52 pm من طرف رانيا حماد
» افضل شركة نقل عفش بالرياض نقل باكستاني 40% خصم | موقع الانوار
الأحد مارس 17, 2024 1:25 pm من طرف رانيا حماد
» افضل معلم جبس بالرياض تركيب جبس بورد بالرياض 20% خصم اتصل الآن
الأحد مارس 17, 2024 1:09 pm من طرف رانيا حماد
» شراء اثاث مستعمل بالكويت بخصم 30%
الأحد مارس 17, 2024 12:54 pm من طرف رانيا حماد
» افضل فني كهربائي منازل بالرياض جودة 100% | اتصل الآن
الأحد مارس 17, 2024 12:36 pm من طرف رانيا حماد
» أفضل فني سباك بالرياض ممتاز بالرياض | اتصل الآن
الأحد مارس 17, 2024 12:25 pm من طرف رانيا حماد
» افضل شركة تنظيف اثاث بالرياض تنظيف كنب واجهات حجر بخصم 40%
الأحد مارس 17, 2024 11:52 am من طرف رانيا حماد
» افضل شركة تنظيف فلل بالرياض | الانوار
الأحد مارس 17, 2024 11:22 am من طرف رانيا حماد
» افضل شركة تنظيف واجهات زجاج بالرياض 30% خصم
الأحد مارس 17, 2024 10:38 am من طرف رانيا حماد
» افضل شركة نقل عفش بالكويت بخصم 20%
الخميس مارس 14, 2024 1:36 pm من طرف رانيا حماد