بسم الله الرحمن الرحيم
ثم تخيل معي اننا سندخل بيانات عائلة كبيرة تتكون من اباء وابناء واحفاد ولكل شخص من هؤلاء اسم وعمر وصفات اخرى ولذلك يجب ان تعرف ان ملفات xml تتكون من الجذر root ومن عناصر element وكل عنصر يمكن ان يحوي عناصر اخرى ابناء child كما ان كل عنصر يتكون من وسم tag ويمكن ان يحوي صفات كثيرة attributes ونص text فلهذا سنعطي للجذر وسم tag نسميه مثلا root و نعطي للاباء وسم tag وليكن مثلا per ثم نعطي للابناء وسم tag وليكن child وكذلك نعطي للاحفاد وسم tag وليكن child2 ثم نظيف لكل واحد صفة العمر attribute ولتكن مثلا age وصفة للترميز ولتكن id وصفة الاسم ولتكن name ولذلك سيكون ملفنا كالآتي
لاحظ جيدا ان العنصر الذي لا يحتوي ابناء فإنه ينتهي ب /> اما الذي يحوي ابناء فإنه ينتهي ب <tagname/> بحيث tagname هو اسم الوسم كما يمكن ان نظيف للعنصر الذي لا يحتوي ابناءا نصا مثلا
كما يمكن ان تتخيل عدة بناءات اخرى لملفات xml حسب ما تمليه الحاجة ليس هذا موضع بسطها وانما اردنا ان نبين بعض المفاهيم الضرورية لكي نتعامل مع هذه الملفات ولتبسيط الرؤية فقط 3- كيفية فتح ملف xml في QT لفتح ملفات Xml في qt نستعمل الطريقة العادية لفتح الملفات لكن ما يهمنا هو المحتوى الذي سنتعامل معه ولهذا يجب علينا القيام بعدة تعريفات ضرورية فهناك عدة طرق في كويتي للتعامل مع ملفات اكس اما بالاعتماد على SAX او DOM اما نحن فنستعمل طريقة DOM في هذا المثال اولا يجب نعلم البرنامج اننا سنستعمل ملفات xml وذلك بتحرير ملف pro للبرنامج ونضيف له مايلي
ثم في الملف الرأسي نعرف طريقة التعامل مع ملفات xml
كما نقوم بتعريف الوثيقة التي ستحوي ملف xml
ثم نقوم بفتح الملف وتحميله في وثيقة doc
قمنا بفتح ملف 'xmlfile.xml' لوضع القراءة فقط ReadOnly ثم حملنا المحتوى في doc باستعمال الدالة setContent وللتأكد من ان المحتوى سليم استعملنا عبارة if اي اذا كان محتوى الوثيقة هو الموجود في ملف file فسوف يتابع البرنامج اما اذا وجد خطأ في المحتوى فسيعطينا رسالة خطأ ثم يخرج باستعمال return ثم اغلقنا ملف file لاننا لم نعد بحاجة اليه 4- قراءة بيانات الملف المفتوح بعد ان فتحنا الملف لم يبقى لنا الا قراءة محتوياته وذلك ما سنتطرق اليه ان شاء الله باستعمال الدوال QdomNodeList و QdomElement و QdomNode والسلام عليكم الجزء الثاني السلام عليكم ورخمة الله قبل البدأ في قراءة البيانات هناك تعريفات ومفاهيم لابد منها كنا قد بينا من قبل ان ملفات xml تحتوي على عناصر وكل عنصر يمكن ان يحتوي على عناصر اخرى في لغة xml هذه العناصر تسمى فروع node بغض النظر على مايمكن ان تحتويه من صفات ونصوص ولذالك عند التنقل بين هذه الفروع نستعمل node مثل node. NextSibling للانتقال الى الفرع التالي ….الخ اما لقراءة بينات كل فرع يجب تحويله الى عنصر element باستعمال الدالة node.toElement() واول مايجب علينا قراءته في الوثيقة doc هو الجذر root ثم نعطي مؤشرا لاول فرع في الجذر ان كان موجودا اي الابن الاول في الجذر سنحصل على اول فرع من الجذر والذي هو في مثالنا السابق 'عبد الله” والذي يحمل وسم per وللانتقال الى الابن التالي للجذر نستعمل
وهكذا الى اخر فرع ولنحاول الان قراءة بيانات اول فرع عندنا
لاحظ جيدا اننا للتنقل بين الفروع node استعملنا الدالة QdomNode ثم لقراءة بينات الفرع استعملنا الدالة QdomElement ثم نبدأ في القراءة باستعمال الدالة Qstring لاسترجاع صفات العنصر attribute اظن ان الامر بسيط جدا لحد الان لكن لنفترض ان العنصر يحتوي نصا فهنا يجب ان تعلم ان النص هنا يعتبر فرعا بحد ذاته ولذلك لا نستعمل QdomElement بل نستعمل QdomNode ونقوم بعملية تحويل لهذا الفرع الى نص والان ماذا لو اردنا ان نعرف عدد الابناء في الفرع الذي اشرنا اليه ففي هذه الحالة نستعمل الدالة QdomNodeList مثلا :
والان للتوضيح اكثر سنقوم بمثال عملي وافضل مثال لذلك هو ملأ أدات الشجرة treeWidget لمشابهتها في التكوين لملفات xml
هذا مثال بسيط لقراءة هذه الملفات فما عليك الان الا تخيل ما تريد ان تفعله كما يمكنك ان تبسط المثال اكثر حسب ما يمليه عليك البرنامج الذي انت بصدد كتابته كأن تستعمل ادات النص والتنقل بين العناصر عنصرا عنصرا …. الى غير ذالك كما يمكنك التنقل عبر وسم خاص tag خاصة اذا كان عندك ملف يختلف الوسم فيه من عنصر لاخر في العمود الواحد وذلك باستعمال الخاصية tagName() فمثلا
والان حاول ان تدخل تعديلات على ملف xml بحيث تغير في الوسم وتظيف الكود المشار اليه انفا لتحصل على النتائج المرجوة في المرة القادمة ان شاء الله سنبين كيفية الكتابة في ملف xml وكيفية تعديل البيانات والسلام عليكم الجزء الثالث 5-الكتابة في ملف xml بعد ان تعرفنا على كيفية قراءة بيانات من ملف xml فلنحاول الان الكتابة في الملف 1 تغيير بيانات عنصر لتغيير بيانات عنصر ما ما عليك الا ان تحدد المؤشر الى ذلك العنصر ثم تستعمل الدلة اللازمة فمثلا اذا كنت تريد تغيير قيمة الصفة attribute تستعمل الدالة setAttribute مثلا نريد ان نغير صفة الحفيد بدر بعد ان نؤشر عليه وهي صفة العمر فنكتب :
هنا قمنا بتغيير سن بدر من 2 الى 5 سنوات ثم قس على هذا المنوال بحيث يمكنك تغيير كل ما ترييد حتى الوسم وذلك باستعمال setTagName......الخ 2 اظافة عنصر جديد لانشاء عنصر جديد نستعمل الدالة createElement ولادراجها نستعمل الدالة appendChild او insertAfter او insertBefore حسب ما تمليه عليك الحاجة appendChild : يضيف عنصرا جديدا الى الاب المحدد insertAfter : يضيف عنصرا جديدا بعد العنصر المحدد insertBefore : يضيف عنصرا جديدا قبل العنصر المحدد مثلا نريد ان نضيف ابنا ولد حديثا لعمر :
3 حذف عنصر لحذف عنصر ما يمكنك ان تتبع الاجراء السابق وتؤشر على العنصر المراد حذفه ثم تستعمل الدالة removeChild فمثلا نريد ان نشير الى عنصر باي دلالة كانت سواء بدلالة الصفة او الوسم ثم نقوم بحذفه فمثلا نريد حذف الحفيد عثمان بدلالة صفة الاسم او الترميز او العمر او بهم جميعا فمثلا
اظن ان العملية بسيطة جدا لا تحتاج الى شرح اكبر ولذلك يمكن ان ننتقل الى الدرس الاخير وهو 6-حفظ البيانات الى ملف بعد ان قمت بتغيير البيانات في الوثيقة doc يمكنك حفظ البيانات الجديدة وذلك بكل بساطة
يمكنك الاستفسار عن كل هذه المخرجات في وثاءق qt فلا حاجة بنا للاطالة الان ارجو ان اكون قد وفقت في ايصال ولو فكرة بسيطة عن ملفات xml باستعمال QdomDocument كما يمكن للاخوة ان يسترسلوا في البحث عن اشياء اخرى في وثاءق qt فهي كثيرة جدا ولا يمكن الاحاطة بها كلها والسلام عليكم ورحمة الله |