وباکا

آموزش تخصصی برنامه نویسی وب

پارسر پیش ساخته XML Expat پردازش اسناد XML را در پی اچ پی امکان پذیر می کند.

پارسر XML Expat

پارسر Expat یک پارسر مبتنی بر رویداد است.

به قطعه XML زیر نگاه کنید:

<from>Jani</from>

یک پارسر رویدادگرا برای XML بالا، مجموعه سه رویداد زیر را گزارش می کند:

  • عنصر شروع : from
  • شروع بخش CDATA : مقدار Jani
  • بستن عنصر : from

توابع پارسر XML Expat بخشی از هسته PHP هستند و نیاز به نصب چیزی برای استفاده از این توابع ندارید.

 

فایل XML

فایل XML بنام “note.xml” که در مثال های بعدی استفاده خواهد شد بصورت زیر است:


<?xml version="1.0" encoding="UTF-8"?>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>

تنظیم اولیه پارسر XML Expat

برای راه اندازی پارسر XML Expat در پی اچ پی، برای رویدادهای مختلف 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("note.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);
?>

توضیحات مثال فوق

  1. با تابع xml_parser_create یک پارسر XML ایجاد کردیم.
  2. توابعی برای استفاده با دستگیره های رویداد مختلف ایجاد کردیم.
  3. تابع xml_set_element_handler را برای تعیین اینکه هنگام رسیدن به تگ های شروع و پایان کدام تابع باید اجرا شود اضافه کردیم.
  4. تابع xml_set_character_data_handler برای تعیین اینکه کدام تابع هنگام رسیدن به داده ها اجرا شود اضافه کردیم.
  5. با تابع xml_parse فایل note.xml را تجزیه کردیم.
  6. در صورت وقوع خطا، تابع xml_error_reporting برای تبدیل خطای XML به صورت متنی استفاده می شود.
  7. تابع xml_parser_free را صدا زدیم تا حافظه تخصیص داده شده هنگام اجرای تابع xml_parser_create را آزاد کند.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

فهرست مطالب