XML اکسپت (XML Expat)
«XML اکسپت» یک «پارسر رویدادمحور (Event-based Parser)» است. یعنی به جای نگه داشتن کل XML، رویدادها را یکی یکی گزارش می کند. مثل بازی که هر حرکت را لحظه ای اعلام می کند.
پارسر رویدادمحور یعنی چه؟
برای هر تگ باز، متن، و تگ بسته یک رویداد می سازد. پس حافظه کم تر مصرف می شود. اما باید «هندلر (Handler)» تعریف کنیم تا واکنش نشان دهیم.
فایل نمونه XML
در مثال، فایل note.xml شامل تگ های ساده است؛ مانند to و from. پارسر اکسپت آن ها را رویدادبه رویداد می خواند.
راه اندازی XML اکسپت در PHP
ابتدا پارسر را می سازیم. سپس هندلرهای شروع/پایان تگ و متن را ثبت می کنیم. بعد فایل را تکه تکه می خوانیم و به پارسر می دهیم.
<?php
$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: ";
break;
}
}
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");
$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_parser_free($parser);
?>
گام های عملی
- فایل
note.xmlرا کنار اسکریپت بگذار. - پارسر را بساز و هندلرها را ثبت کن.
- فایل را بخوان و با
xml_parse()پردازش کن.
نکته: در خطاها از xml_error_string() و شماره خط کمک بگیر.
هشدار: نام تگ ها در اکسپت معمولاً به حروف بزرگ می آید؛ در سوییچ همین را در نظر بگیر.
ادامه مسیر
- سیمپل XML: دریافت؛ دسترسی مستقیم به گره ها.
- DOM در PHP؛ ساخت درخت برای تغییرات پیچیده.
جمع بندی سریع
- اکسپت رویدادمحور و کم مصرف است.
- برای تگ ها و متن، هندلر تعریف کن.
- فایل را به تکه های کوچک پارس کن.
- در خطاها پیام خوانا بساز.