PHP – پارسر XML Expat
آخرین بروزرسانی:
پارسر داخلی XML Expat امکان پردازش اسناد XML را در PHP فراهم میکند.
پارسر XML Expat
پارسر Expat یک پارسر مبتنی بر رویداد (event-based parser) است.
به مثال زیر از یک تکه XML توجه کنید:
<from>Jani</from>
یک پارسر مبتنی بر رویداد، XML بالا را به عنوان یک سری از سه رویداد گزارش میدهد:
- شروع عنصر (Start element):
from
- شروع بخش CDATA، مقدار:
Jani
- بستن عنصر (Close element):
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 را در PHP راهاندازی کنیم، برخی از هندلرها (handlers) را برای رویدادهای مختلف XML تعریف کنیم و سپس فایل XML را پارس کنیم.
مثال
<?php
// راهاندازی پارسر XML
$parser = xml_parser_create();
// تابع برای استفاده در شروع یک عنصر
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 stop($parser, $element_name) {
echo "<br>";
}
// تابع برای استفاده هنگام یافتن دادههای کاراکتری
function char($parser, $data) {
echo $data;
}
// مشخص کردن هندلر عنصر
xml_set_element_handler($parser, "start", "stop");
// مشخص کردن هندلر دادهها
xml_set_character_data_handler($parser, "char");
// باز کردن فایل XML
$fp = fopen("note.xml", "r");
// خواندن دادهها
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)));
}
// آزاد کردن حافظه پارسر XML
xml_parser_free($parser);
?>
توضیح مثال:
- پارسر XML را با تابع
xml_parser_create()
راهاندازی کنید. - توابعی برای استفاده با هندلرهای رویداد مختلف ایجاد کنید.
- تابع
xml_set_element_handler()
را اضافه کنید تا مشخص کنید کدام تابع هنگام برخورد پارسر با تگهای باز و بسته اجرا خواهد شد. - تابع
xml_set_character_data_handler()
را اضافه کنید تا مشخص کنید کدام تابع هنگام برخورد پارسر با دادههای کاراکتری اجرا خواهد شد. - فایل “note.xml” را با تابع
xml_parse()
پارس کنید. - در صورت بروز خطا، تابع
xml_error_string()
را برای تبدیل خطای XML به توضیح متنی اضافه کنید. - با تابع
xml_parser_free()
حافظه تخصیص داده شده باxml_parser_create()
را آزاد کنید.
برای ارسال نظر لطفا ابتدا وارد حساب کاربری خود شوید. صفحه ورود و ثبت نام