مفسر الاوامر XML

يجعل مفسر الاوامر الامر سهلاً لقراءة ملفات XML ضمن صفحات PHP .


ماهي لغة XML ؟

تستخدم لغة XML لوصف البيانات وتركز على نوع البيانات . يوصف ملف XML بنية البيانات . لايوجد وسوم معرفة مسبقاً في لغة XML بل يجب عليك إنشاء وسومك الخاصة . ان أردت دراسة المزيد حول XML يمكنك زيارة دورة XML في مكتبة المعهد .


ماهو المفسر ؟

يستخدم من أجل قراءة و تحديث و إنشاء ومعالجة ملف XML حيث ستحتاج الى مفسر XML .

يوجد نوعان أساسيان من مفسر XML :

  • المفسر الشجري: يقوم هذا المفسر بتحويل ملف XML الى بنية شجرية حيث تقوم بتحليل الصفحة كاملة كما تقدم صلاحيات لجميع عناصر الصفحة كما في لغة (DOM) .
  •  المفسر الحدثي : يقوم هذا المفسر بعرض صفحة XML كسلسلة من الأحداث و عند حدوث حدث معين سيتم استدعاء كود وظيفي للتعامل معه .

يمكن تعريف المفسر كمفسر يعتمد على الاحداث . يركز هذا النوع من المفسر على محتوى صفحة XML لا على البنية وبسبب ذلك يمكن لهذا المفسر التحكم بالبيانات والمعلومات بسرعة اكبر من المفسر الشجري . لاحظ كود XML

<from>Jani</from>

يقدم المفسر الحدثي مثال XML السابق كسلسلة من ثلاثة أحداث :

  •  بداية العنصر : from
  •  بداية CDATA و القيمة Jani .
  •  نهاية العنصر : from

يحتوي المثال السابق على بنية XML منتظمة و بالرغم من ذلك فإن هذا المثال ليس فعالاً لأنه لايحتوي على تعريف نوع الصفحة DTD ضمنها .

ملاحظة : يجب أن تكون صفحة XML منتظمة البنية وإلا سيقوم المفسر بتوليد خطأ .


التنصيب

تعتبر الأكواد الوظيفية في مفسر XML جزء من أكواد PHP و لذلك لاتحتاج إلى تنصيبات اضافية لاستخدام تلك الأكواد


ملف XML

مثال عن ملف XML والذي سيتم استخدامه لاحقاً :

<?xml version="1.0" encoding="ISO-8859-1"?>

<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>

البدء بتفعيل مفسر XML

ان اردت البدء بإنشاء مفسر XML يمكن تعريف بعض أحداث XML المختلفة ثم يمكن إنشاء مفسر لملف XML .

مثال

<?php

//Initialize the XML parser
$parser=xml_parser_create();

//Function to use at the start of an element
function start($parser,$element_name,$element_attrs)
{
switch($element_name)
{
case "NOTE":
echo "-- Note --<br />";
break;
case "TO":
echo "To: ";
break;
case "FROM":
echo "From: ";
break;
case "HEADING":
echo "Heading: ";
break;
case "BODY":
echo "Message: ";
}
}

//Function to use at the end of an element
function stop($parser,$element_name)
{
echo "<br />";
}

//Function to use when finding character data
function char($parser,$data)
{
echo $data;
}

//Specify element handler
xml_set_element_handler($parser,"start","stop");

//Specify data handler
xml_set_character_data_handler($parser,"char");

//Open XML file
$fp=fopen("test.xml","r");

//Read data

while ($data=fread($fp,4096))
{
xml_parse($parser,$data,feof($fp)) or
die (sprintf("XML Error: %s at line %d",
xml_error_string(xml_get_error_code($parser)),
xml_get_current_line_number($parser)));
}

//Free the XML parser
xml_parser_free($parser);
?>


ستظهر النتيجة كالتالي :

-- Note --

To: Tove
From: Jani
Heading: Reminder
Message: Don't forget me this weekend!

كيف يعمل الكود ؟

  1.  إنشاء مفسر XML من خلال الكود xml_parser_create() .
  2.  إنشاء وظائف لاستخدامها مع معالجات أحداث مختلفة .
  3.  اضافة xml_set_element_handler() لتحديد أي الوظائف التي ستظهر عندما يقوم المفسر بمواجهة بدايات ونهايات الوسوم .
  4.  اضافة xml_set_character_data_handler() لتحديد أي الوظائف التي ستظهر عندما يقوم المفسر بمواجهة البيانات .
  5.  تفسير الملف التجريبي “test.xml” من خلال الوظيفة xml_parse() .
  6.  في حال حدوث خطأ يمكن اضافة xml_error_string() لتحويل خطأ XML الى وصف نصي مشروح .
  7.  يمكن استخدام xml_parser_free() لتحرير الذاكرة المحددة مع الوظيفة xml_parser_create() .