النتائج 1 إلى 14 من 14

الموضوع: PHP + XML درس ممتع

  1. #1
    عضو نشيط
    تاريخ التسجيل
    Nov 2005
    المشاركات
    41

    PHP + XML درس ممتع



    بسم الله الرحمن الرحيم
    PHP + XML
    السلام عليكم ورحمة الله وبركاته والصلاة والسلام على خير خلق الله محمد صلى الله عليه وسلم
    أولا هذا الدرس ليس درس XML ولكن هو درس PHP وكيفية دعمه للـ XML

    ثانياً لست بصدد شرح أي معلومات عن لغةالـ PHP ولكن شرح تقنية مدعومة أصلاً وكيفية الاستفادة من هذه التقنية

    أفترض من القارئ ألمامه بـ HTML و مبادئ XML و مبادئ PHP

    للمزيد من المعلومات حول مبادئ الـ XML ننصحك بزيارة :

    http://www.w3schools.com/xml

    تتكون هذه الدروس من ثلاثة مراحل :

    1- بناء مترجم (قارئ) XML في الـ PHP

    2- مثال متقدم عن بناء مترجم

    3- استخراج معلومات قواعد البيانات في ملفات الـ XML .


    الدرس الأول :

    بناء مترجم (قارئ) XML في الـ PHP

    نظراً لأن كل المراجع هي باللغة الانكليزية واختلاف ترجمة المصطلحات من كاتب لأخر ولتسهيل الرجوع للمصادر سوف اطرح الكلمات الانكليزية وترجمتها المستعملة داخل الدرس

    Extensible : قابلة للتوسع أو التمدد

    Extensions : تنسيقات

    Parser : مترجم - قارئ

    Element : عنصر

    Handlers : مقابض

    Character : محارف

    Function : دالة - وظيفة

    مقدمة:

    (eXtensible Markup Language) XML هذه اللغة التي بدأت بالانتشار في الاونة الأحيرة بشكل واسع وكبير وهي مبنية داخلياً في الـ PHP في نموذج التسيقات.

    وعلى عكس الكثير من الامتدادت ,إن XML مدعمة افتراضياً لذلك لا تحتاج إلى إعدادات إضافية لكي تعمل تسطيع أن تتأكد من الدعم أطبع الملف ()phpinfo وقارن كما مع الشكل التالي :

    تنسيق الـ XML في الـ PHP يسمح لك بترجمة ملفات الـ XML فتستطيع أن تقرأ من خلال ملفات الـ XML وتتبع العقد والفروع و تنجز العمليات على المعلومات المحتواه داخله

    إن الـ PHP لا تستطيع مقارنة و التأكد من صحة وشرعية ملف الـ XML لذلك عليك أن تكون متأكداً من صحة ملف الXML قبل تمريره إلى ملفات الـPHP

    بناء مترجم ( قارئ) لـ XML :

    قبل أن تبدأ باستعمال صيغة XML الموجودة في الـ PHP لقراءة ملفات الـ XML عليك إعلان بداية مترجم (قارئ) جديد ونظراً لكون هذه اللغة الوصفية قايلة للتوسع والتمدد لذلك فإن لا سبيل للـ PHP لمعرفة العناصر التي تريد أن تبحث عنها داخل ملف الـ XML.

    ومن أجل ذلك يجب عليك أن تخبر الـ PHP كيفية قراءة المستند وذلك يكون ابتداءا من تعريف دالة مترجم جديدة ليتم إنشاءه ومن ثم عليك تعريف مقابض العتاصر ومقابض المحارف ولتعريف هذه المصطلحات التي يمكن أن تكون جديدة عليك يكون كالتالي ,

    مقابض العناصر : ببساطة هي (FUNCTION) دوال أو وظائف ستستدعى عند مصادفتها هذه العناصر في ملف الـ XML

    وهنالك نوعين من المقابض :

    الأول : يستدعى عندما يصادف هذا العنصر في ملف الـXML

    الثاني : يستدعى عندما يغادر المترجم هذا العنصر

    وبالاضافة عليك أن تعرف مقابض للمعلومات المحارف الموجود بين العناصر .

    إذا كان قد انتابك شعور بالغموض أو عدم الاستيعاب فدعنا ندعم هذا الشرح بمثال عن ملف XML لمعرفة تكوين هذ الملف أولاً :

    كود:
     
    <?xml version="1.0"?> 
    <document>
        <title>XML Is Easy</title>
        <body>لمعرفة المزيد أقرأ الدرس كاملاً.</body>
    </document>
    من الوهلة الأولى يبدو شكل ملف XML مؤلوفاً فهو شبيه إلى حد ما بملفات الـ HTML حيث نلاحظ العناصر محاطة بـ “>” و “<” والبداية والنهاية تفرق بـ “/” ولتبسيط أكثر تستطبع تخيل الوسم

    كود:
     <H1> عنوان عريض </H1>
    ففي البداية العنصر <H1> وفي النهاية </H1> وبينهما هي المعلومات وبعد هذا المثال المبسط إن كنت لازلت تجد غموض في الشرح فهذا يعني أنك لن تستطيع تكملة هذا الدرس لأنه سوف يزداد تعقيداً وسوف ندخل في بنية المترجم (القارئ) .



    1- تعريف دالة مترجم جديد :

    في بداية كل مترجم عليك تعريف دالة مترجم جديد ليتم إنشاء هذا القارئ أو المترجم وحجزه في الذاكرة وذلك بـ
    كود:
     $parser = xml_parser_create(ENCODING);
    بواسطة هذه الدالة ()xml_parser_create تكون قد أمرت بوجود المترجم والتي هي ضرورية جدا ً لعمل المترجم أو وجوده بالاصل
    بالاضافة تستطيع بشكل أختياري وضع نوع الترميز الذي تود ان يتبعه المترجم أوالقارئ وتستطيع أن تختار أحد هذه الانواع الشهيرة :
    كود:
    ·         ISO-8859-1 (Default)
    
    ·         US-ASCII
    
    ·         UTF-8
    الآن بعد أن انتهيت من أول خطوة من إنشاء المترجم سيكون عليك تحضير المقابض التي سوف تمسك العناصر تحضيرا لاستخلاص المعلومات الموجودة بينها.

    تعريف مقابض العناصر :

    كما تحدثنا سابقاً فإن الخطوة التالية هي تعريف مقابض للعناصر والتي تتم بالدالة ()xml_set_element_handler بالشكل التالي

    كود:
     xml_set_element_handler(XML_PARSER, START_FUNCTION,END_FUNCTION)
    ولهذه الدالة ثلاثة إجراءات :

    1- XML_PARSER : وهو المتغير الذي سبق وعرفته في الخطوة الأولى في تعريف مترجم جديد

    2- START_FUNCTION : وهي الدالة التي سيتم استدعائها عند بداية مصادفة المترجم للعنصر

    3- END_FUNCTION : وهي الدالة التي سيتم استدعائها عند مغادرة المترجم لهذا العنصر

    تعريف مقابض المحارف :

    تعرف بالدالة ()set_character_handler بالشكل التالي :

    كود:
     xml_set_character_handler(XML_PARSER, CHARACTER_FUNCTION);
    وتأخذ الاجراءات التالية :

    1- XML_PARSER : وهو المتغير الذي سبق وعرفته في الخطوة الأولى في تعريف مترجم جديد

    2- CHARACTER_FUNCTION : وهي الدالة التي سيتم استدعائها في حالة مصادفة المترجم معلومات المحارف

    الشروع في المترجم :

    الجزء الأخير من هذه الاحجية هو إعطاء الأمر في بداية كل العمليات السابقة وذلك بالدالة xml_parse(): بالشكل التالي :

    كود:
     xml_parse(XML_PARSER, XML);
    وتأخذ الاجراءين التاليين :

    1- XML_PARSER : وهو المتغير الذي سبق وعرفته في الخطوة الأولى في تعريف مترجم جديد

    2- XML : ملف الـ XML الذي سوف يتم قراءته

    تنظيف (تفريغ الذاكرة ) :

    بعد الانتهاء من قراءة المستند يتوجب عليك الآن إفراغ الذاكرة التي تم حجزها من خلال تكوينك المترجم وتكون بالدالة ()xml_parser_free على الشكل التالي :
    كود:
     xml_parser_free(XML_PARSER);
    ويأخذ إجراء واحد هو XML_PARSER : وهو المتغير الذي سبق وعرفته في الخطوة الأولى في تعريف مترجم جديد.

    والآن بعد كل هذا الشرح للننتقل إلى الجزء العملي في الدرس وهو مثال عملي عن كل ما طرح في الأعلى

    عليك أولا إنشاء ملفين الأول باسم simple.xml و الثاني xml1.php وأيضا محرر للنصوص للتمكن من كتابة الكود في داخلهما والـ notepad تفي بالغرض

    سنستخدم طريقة ترقيم الكود لكي يسهل شرح كل سطر على حدا

    simple.xml
    كود:
     
    1.  <?xml version="1.0"?>
    2.  <document>
    3.  <title> معرضXML</title>
    4.  <body>لاستكشاف هذه اللغة عليك قراءة الموضوع</body>
    5.  </document>
    xml1.php
    كود:
     
     <html dir=rtl>  
      1.  <?
     2.  function startElement($xml_parser, $name, $attributes) {
     3.  print("<p><i>هنا تم مصادفة العنصر :</i>$name\n");
     4.  }
     5.
     6.  function endElement($xml_parser, $name) {
     7.    print("<p><i>هنا مغادرة العنصر:</i>$name\n");
     8.  }
     9.
    10.  function characterData($xml_parser, $data) {
    11.    if($data != "\n") { 
    12.      print("<p><i>هنا مصادفة المعلومات:</i>$data\n");
    13.    }
    14.  }
    15.
    16.  function load_data($file) {
    17.    $fh = fopen($file, "r") or die ("<P>لم يستطع فتح الملف!");
    18.    $data = fread($fh, filesize($file));
    19.    return $data;
    20.  }
    21.  /***** الرئيسي  *****/
    22.  $file = "simple.xml";
    23.  $xml_parser = xml_parser_create();
    24.  xml_set_element_handler($xml_parser, "startElement", "endElement");
    25.  xml_set_character_data_handler($xml_parser, "characterData");
    26.  xml_parse($xml_parser, load_data($file)) or die ("<P> خطأ في قراءة الملف XML!");
    27.  xml_parser_free($xml_parser);
    28.  ?>
    29. </html>
    النتيجة ستكون كالتالي :

    وشرح هذا السكريبت سطراً سطراً يكون :

    2- في البداية أنشأنا دالة اسمها startElement() لتمسك أي عنصر يصادفه السكريبت في قراءة ملف الـ XML وتأخذ هذه الدالة الاجراءين التاليين

    · $xml_parser

    · $name

    · $attributes

    3 – طباعة عبارة " هنا تم مصادفة العنصر ".

    6 – إنشاء دالة اسمها endElement() لتسمك نهاية أي عنصر يصادفه السكريبت اثناء قراءته لملف الـ XML وتأخذ الاجراءات التالية :

    · $xml_parser

    · $name

    7- طباعة عبارة " هنا مغادرة العنصر ".

    10– إنشاء دالة اسمها characterData() لتسمك المعلومات التي تحدها بين بداية ونهاية العنصر والذي يصافده السكريبت اثناء قراءته لملف الـ XML وتأخذ الاجراءات التالية

    · $xml_parser

    · $data

    11- التأكد من أن المعلومات بين العنصر ليست سطر فارغ عن طريق if($data != "\n")

    12- طباعة عبارة " هنا مصادفة المعلومات ".

    16- إنشاء دالة اسمها load_data() والتي سوف تقرأ المعلومات من الملف إلى السكريبت والذي بدوره سوف يترجمه وتأخذ إجراء واحد هو $file هو اسم الملف كاملا متضمناً المسار الكامل لملف الـ XML الذي سوف يتم ترجمته

    17- محاولة العثور على مقبض الملف $file في حالة الفشل سوف يتك إيقاف السكريبت وطباعة رسالة الخطأ

    18- في حالة النجاح قراءة الملف ووضعه داخل متغير هو $data

    * ملاحظة هذه الاجراء لا ينفع مع الملفات الضخمة

    19- إعادة المتغير $data إلى البرنامج

    22 - تعريف الملف الذي سوف تتم قرائته مع ملاحظة أنه يمكن أن يكون مع المسار الكامل

    · Windows: $file = "C:\appserv\www\xml\myxmlfile.xml";

    · Linux: $file = "/home/me/xml/myxmlfile.xml";

    23- إنشاء متغير $xml_parser الذي سوف يعرف المترجم للـ PHP بواسطة الدالة xml_parser_create()

    24- تحديد مقابض بداية ونهاية العنصر التي حددتها في الأعلى وذلك باستخدام دالة xml_set_element_handler() وتعني في أي مكان يجد عنصر عليه أن يتعامل معه بالدالة السابقة

    25- تحديد مقبض المحارف بواسطة الدالة xml_set_character_data_handler() وتعني في أي مكان تجد فيه معلومات عليك التعامل معها بواسطة الدالة characterData()

    26- بداية قراءة الملف بواسطة الدالة xml_parse() والتي تحتاج للمتغير $xml_parser وإلى مصدر المعلومات وفي مثالنا استخدمنا الدالة load_data($file) وفي حالة الفشل سوف يوقف عمل السكريبت ويطبع رسال خطأ

    27- بعد انتهاء المترجم من عمله علينا إفراغ الذاكرة من المتغيرات المحجوزة عن طريق الدالة
    ()xml_parser_free

    وبذلك نكون انتهينا من شرح المثال بالكامل. والحمد لله رب العالمين


    ملفات هذا الدرس تستطيع أن تحصل عليها من الرابط
    http://www.e3lannat.com/XML/lesson1_...lanNat.CoM.rar







  2. #2
    عضو فعال
    تاريخ التسجيل
    Sep 2004
    المشاركات
    1,157


    ربي يعطيك العافيه ..
    لا تحرمنا من هالمشاركاات ..





    __________________
    مدونتي

  3. #3
    عضو فعال
    تاريخ التسجيل
    Feb 2004
    المشاركات
    1,318


    بارك الله فيك اخوي





    __________________
    سبحان الله وبحمده سبحان الله العظيم

    منتديات ترنيمة

  4. #4
    مُجَاهِد سابقاً
    تاريخ التسجيل
    Apr 2004
    المشاركات
    12,000


    بارك الله فيك ..

    والف الف شكر لك ..





    __________________
    استخدم خاصية تنبيه المشرفين للضرورة وعند ملاحظة موضوع يخالف قوانين منتديات سوالف وسيتم مراجعة الموضوع او المشاركة المبلغ عنها على الفور

  5. #5


    ممتاز وازدي من الشعر بيت


    دور هنا تلقى درسين كمان


    www.osamaly.com





    __________________
    حمل ملفاتك للنت بدون تسجيل بدون حذف
    http://www.091-092.com/uploader/uploader.php

    ايضا دعم عربي مجاني لمجلة مامبو وجملة وداعا للنيوك
    http://www.091-092.com/091-092/index.php?showforum=19

  6. #6
    عضو فعال
    تاريخ التسجيل
    Apr 2004
    المشاركات
    1,479


    Thanks For The Tutorial

    ,Go On You Will Be Best





    __________________
    سبحان الله وبحمده .. سبحان الله العظيم
    المستضيفون العرب لخدمات ادارة السيرفرات

  7. #7
    عضو نشيط جدا
    تاريخ التسجيل
    Nov 2005
    المشاركات
    568


    جزاك الله خير ،ألف شكر





    __________________
    تصميم .

  8. #8
    عضو نشيط
    تاريخ التسجيل
    Jan 2005
    المشاركات
    285


    الله يعطيك ألف عافية
    كنت ناوي أخوض في هذا وانت جزاك الله خير قصرت المشوار





    __________________
    "من علمني حرفا صرت له عبدا"
    |+|PHP|+|loowy|+|PHP|+|
    "عامل الناس بما تحب أن يعاملوك به"
    لـــــــــــــــــــــــــــــؤي

  9. #9
    خبير سيرفرات لينكس
    تاريخ التسجيل
    Mar 1999
    المشاركات
    4,917


    هل يمكن طباعة مسار معين ؟

    يعني انا عندي شجرة عناصر لا اريد ان اطبع كل العناصر بل اريد ان ادخل الى عمق معين واطبع عناصرة فقط ؟

    وهل هذة التقنية مدعومة على php4 ?






  10. #10
    عضو نشيط
    تاريخ التسجيل
    Jan 2005
    المشاركات
    285


    سؤال بسيط:
    كيف استطيع استخراج الـ attributes

    منتظر الاجابة........





    __________________
    "من علمني حرفا صرت له عبدا"
    |+|PHP|+|loowy|+|PHP|+|
    "عامل الناس بما تحب أن يعاملوك به"
    لـــــــــــــــــــــــــــــؤي

  11. #11
    عضو نشيط
    تاريخ التسجيل
    Nov 2005
    المشاركات
    41


    السلام عليكم
    نعم تستطيع أن تستخرج معلومات دون أخرى ..وسيكون في درس قادم
    وأيضاً سأشرح استخراج attributes وذلك حسب ما مقرر في الدرس الثاني وهو بناء مترجم متقدم
    واعتذر مجدداً عن عدم طرحي الدرس الثاتي الآن لأني منشغل قليلاً
    ولكني بصراحة توقعت تفاعل أكثر مع هذه التقنية والتي هي ليست جديدة أبداً ومدعومة في php4
    والله الموفق





    __________________
    www.E3LANNAT.com

  12. #12
    خبير سيرفرات لينكس
    تاريخ التسجيل
    Mar 1999
    المشاركات
    4,917


    سلام عليكم .

    الموضوع مهم جدا بالنسبة لي والتفاعل الذي تريدة يكون على محصور ضمن من يستخدم هذة التقنية ولا اتوقع ان الكثير يستخدمها ..
    بالمناسبة قد كنت وصنعت محلل xml سابقا ولكنه معقد جدا وطريقتك اسهل من طريقتي --- ان وجدت الوقت اضفتة لكم اليوم باذن الله ولكن اتمنى عليك فضلا ان تسرع بالدرس الثاني فاني متحرق له .

    جزيت خيرا ..... :nice:






  13. #13
    عضو نشيط
    تاريخ التسجيل
    Jan 2005
    المشاركات
    285


    الموضوع مهم بالنسبة لي

    وانت عندك معلومات طيبة وطريقتك السابقة تدل على ذلك

    بانتظارك أخ e3lannat.com

    جزاك الله خير ,,,, وما قصرت





    __________________
    "من علمني حرفا صرت له عبدا"
    |+|PHP|+|loowy|+|PHP|+|
    "عامل الناس بما تحب أن يعاملوك به"
    لـــــــــــــــــــــــــــــؤي

  14. #14
    عضو سوبر نشيط
    تاريخ التسجيل
    May 2007
    المشاركات
    613


    موضوع أكثر من رائع





    __________________
    مدونة؟





ضوابط المشاركة

  • لا تستطيع إضافة مواضيع جديدة
  • لا تستطيع الرد على المواضيع
  • لا تستطيع إرفاق ملفات
  • لا تستطيع تعديل مشاركاتك
  •  

أضف موقعك هنا| اخبار السيارات | حراج | شقق للايجار في الكويت | بيوت للبيع في الكويت | دليل الكويت العقاري | مقروء | شركة كشف تسربات المياه | شركة عزل اسطح بالرياض | عزل فوم بالرياض| عزل اسطح بالرياض | كشف تسربات المياة بالرياض | شركة عزل اسطح بالرياض