مستشهد XML Expat في PHP
يُمكن لـ Expat المدمج معالجة وثائق XML في PHP.
يستخدم XML لوصف البيانات، وتركيزه هو ما هو البيانات. يصف ملف XML بنية البيانات.
ما هو XML؟
في XML، لا توجد علامات مسبقة التعريف. يجب عليك تعريف علاماتك الخاصة.
إذا كنت ترغب في تعلم المزيد حول XML، يرجى زيارة XML Tutorial.
ما هو Expat؟
للقراءة والتحديث - إنشاء وتعامل مع وثيقة XML، تحتاج إلى مستشعر XML.
هناك نوعان رئيسيان من مستشعرات XML:
- مستشعر الأشجار: يتحول هذا المستشعر وثيقة XML إلى بنية شجرة. يتحليله كله ويقدم واجهة برمجة التطبيقات لتحديد العناصر في الشجرة، مثل نموذج وثيقة الدокумент (DOM).
- مستشعر الأحداث: يرى وثيقة XML كسلسلة من الأحداث. عند حدوث حدث معين، يُدعى الدالة للتعامل معه.
مستشعر الأحداث
يركز مستشعر الأحداث على محتويات وثيقة XML وليس على نتائجها. لذلك، يمكن لمستشعر الأحداث الوصول إلى البيانات بشكل أسرع من مستشعر الأشجار.
انظر إلى الجزء التالي من XML:
<from>جون</from>
يحول مستشعر الأحداث XML المذكور أعلاه إلى سلسلة من ثلاثة أحداث:
- بدء العنصر: from
- بدء جزء CDATA، القيمة: John
- إغلاق العنصر: from
يحتوي المثال XML المذكور أعلاه على XML في شكل جيد. لكن هذا المثال هو XML غير صالح، لأنه لا يحتوي على تصريح نوع الملف (DTD) المرتبط به، ولا يحتوي على DTD مدمج.
لكن، عند استخدام مستشعر Expat، لا يوجد فرق. Expat هو مستشعر لا يتحقق من الصحة، ويجاهل أي DTD.
بصفتها مستشعرًا لـ XML قائمًا على الأحداث وغير معتمد، Expat سريع وبدون وزن، مما يجعله مثاليًا للعروض الالكترونية على PHP.
ملاحظة:يجب أن يكون وثيقة XML في شكل جيد، وإلا سيقوم Expat بإنشاء أخطاء.
التثبيت
مستشعر XML Expat جزء من النواة الخاصة بـ PHP. يمكن استخدام هذه الوظائف دون الحاجة إلى تثبيت.
ملف XML
سنستخدم في مثالنا الملف XML التالي:
<?xml version="1.0" encoding="ISO-8859-1"?> <note> <to>جورج</to> <from>جون</from> <heading>تذكير</heading> <body>لا تنسى الاجتماع!</body> </note>
تعيين معالج XML
نحن نريد تعيين معالج XML في PHP، لتحديد معالجي الحدث المختلفة لل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); ?>
The output of the above code:
-- Note -- To: George From: John Heading: Reminder Message: Don't forget the meeting!
Explanation of the working principle:
- Initialize the XML parser using the xml_parser_create() function
- Create functions that work with different event handling programs
- Add the xml_set_element_handler() function to define which function to execute when the parser encounters start and end tags
- Add the xml_set_character_data_handler() function to define which function to execute when the parser encounters character data
- Parse the file "test.xml" using the xml_parse() function
- In case of an error, add the xml_error_string() function to convert the XML error to a text description
- Call the xml_parser_free() function to free the memory allocated to the xml_parser_create() function
More information about the PHP Expat Parser
For more information about PHP Expat Functions, please visit our PHP XML Parser Reference Manual.