| |||||
| 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> كود: <H1> عنوان عريض </H1> 1- تعريف دالة مترجم جديد : في بداية كل مترجم عليك تعريف دالة مترجم جديد ليتم إنشاء هذا القارئ أو المترجم وحجزه في الذاكرة وذلك بـ كود: $parser = xml_parser_create(ENCODING); بالاضافة تستطيع بشكل أختياري وضع نوع الترميز الذي تود ان يتبعه المترجم أوالقارئ وتستطيع أن تختار أحد هذه الانواع الشهيرة : كود: · 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); والآن بعد كل هذا الشرح للننتقل إلى الجزء العملي في الدرس وهو مثال عملي عن كل ما طرح في الأعلى عليك أولا إنشاء ملفين الأول باسم simple.xml و الثاني xml1.php وأيضا محرر للنصوص للتمكن من كتابة الكود في داخلهما والـ notepad تفي بالغرض سنستخدم طريقة ترقيم الكود لكي يسهل شرح كل سطر على حدا simple.xml كود: 1. <?xml version="1.0"?> 2. <document> 3. <title> معرضXML</title> 4. <body>لاستكشاف هذه اللغة عليك قراءة الموضوع</body> 5. </document> كود:
<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 | |||||
|
| |||||
|
بارك الله فيك .. والف الف شكر لك ..
__________________ ██████████ ██████████ ██████████ مهارات سوفت مهارات سوفت للبرامج وتطوير المواقع والمنتديات والتبادل التجاري. للتواصل .. 00967733873335 باب الحارة .. للبيع ..!! | |||||
|
| |||||
|
هل يمكن طباعة مسار معين ؟ يعني انا عندي شجرة عناصر لا اريد ان اطبع كل العناصر بل اريد ان ادخل الى عمق معين واطبع عناصرة فقط ؟ ![]() وهل هذة التقنية مدعومة على php4 ?
__________________ الزيند بين واقع الكسر وهاجس الحماية. PHP تعد خيار تكتيكي لبناء موقع أو حتى( مويقع )! الحماية هدف لا يدرك و تجاوزها متعة وهدف أيضا . إن كنت تريد صندوق لتلعب به فإختر Windows وإلا فاختر Linux. | |||||
|
| |||||
|
السلام عليكم نعم تستطيع أن تستخرج معلومات دون أخرى ..وسيكون في درس قادم وأيضاً سأشرح استخراج attributes وذلك حسب ما مقرر في الدرس الثاني وهو بناء مترجم متقدم واعتذر مجدداً عن عدم طرحي الدرس الثاتي الآن لأني منشغل قليلاً ولكني بصراحة توقعت تفاعل أكثر مع هذه التقنية والتي هي ليست جديدة أبداً ومدعومة في php4 والله الموفق
__________________ www.E3LANNAT.com | |||||
|
| |||||
|
سلام عليكم . الموضوع مهم جدا بالنسبة لي والتفاعل الذي تريدة يكون على محصور ضمن من يستخدم هذة التقنية ولا اتوقع ان الكثير يستخدمها .. بالمناسبة قد كنت وصنعت محلل xml سابقا ولكنه معقد جدا وطريقتك اسهل من طريقتي --- ان وجدت الوقت اضفتة لكم اليوم باذن الله ولكن اتمنى عليك فضلا ان تسرع بالدرس الثاني فاني متحرق له . جزيت خيرا .....
__________________ الزيند بين واقع الكسر وهاجس الحماية. PHP تعد خيار تكتيكي لبناء موقع أو حتى( مويقع )! الحماية هدف لا يدرك و تجاوزها متعة وهدف أيضا . إن كنت تريد صندوق لتلعب به فإختر Windows وإلا فاختر Linux. | |||||
|
| |||||
|
الموضوع مهم بالنسبة لي وانت عندك معلومات طيبة وطريقتك السابقة تدل على ذلك بانتظارك أخ e3lannat.com جزاك الله خير ,,,, وما قصرت
__________________ "من علمني حرفا صرت له عبدا" |+|PHP|+|loowy|+|PHP|+| "عامل الناس بما تحب أن يعاملوك به" لـــــــــــــــــــــــــــــؤي | |||||
|
![]() |
| أدوات الموضوع | |
| |