unparsed entity decl handler (xml_set_unparsed_entity_decl_handler)
اینجا با «هندلر موجودیت پردازش نشده XML» آشنا می شوی. «موجودیت پردازش نشده (Unparsed Entity)» یعنی فایل خارجی با NDATA. «هندلر (Handler)» هم یعنی تابع واکنش گر. وقتی چنین موجودیتی اعلان شود، این تابع صدا می خورد؛ مثل اعلام اسم یک ابزار آزمایشگاه.
تعریف و کاربرد
تابع xml_set_unparsed_entity_decl_handler() مشخص می کند هنگام اعلان «موجودیت پردازش نشده» کدام تابع اجرا شود. این تابع اطلاعات نام موجودیت، سیستم آی دی، پابلیک آی دی و نام «یادداشت گذاری (Notation)» را به تو می دهد.
برای متن های معمولی، صفحه هندلر داده کاراکتری را ببین. همچنین برای «یادداشت گذاری»، notation decl handler مرتبط است.
برای دسترسی سریع، هندلر موجودیت پردازش نشده XML را نشانه گذاری کن.
سینتکس
xml_set_unparsed_entity_decl_handler($parser, $handler);
نمونه کد عملی
پارسر را می سازیم، دو هندلر ثبت می کنیم، سپس فایل را تکه تکه parse می کنیم و خطا را دقیق می گیریم.
<?php
$parser = xml_parser_create();
function char($parser, $data) {
echo $data;
}
function unparsed_ent_handler(
$parser,
$entity_name,
$base,
$system_id,
$public_id,
$notation_name
) {
echo $entity_name . "<br>";
echo $system_id . "<br>";
echo $public_id . "<br>";
echo $notation_name . "<br>";
}
xml_set_character_data_handler($parser, "char");
xml_set_unparsed_entity_decl_handler($parser, "unparsed_ent_handler");
$fp = fopen("test.xml", "r");
while ($data = fread($fp, 4096)) {
$ok = xml_parse($parser, $data, feof($fp));
if (!$ok) {
$msg = sprintf(
"XML Error: %s at line %d",
xml_error_string(xml_get_error_code($parser)),
xml_get_current_line_number($parser)
);
die($msg);
}
}
xml_parser_free($parser);
fclose($fp);
?>
پارامترها
parser: پارسر XML فراخواننده هندلر.handler: نام تابع واکنش گر با شش پارامتر.
امضای تابع هندلر
$parser: خود پارسر.$entity_name: نام موجودیت خارجی.$base: پایه resolve سیستم آی دی. فعلاً خالی است.$system_id: آدرس سیستم موجودیت.$public_id: شناسه عمومی موجودیت.$notation_name: نام یادداشت گذاری موجودیت.
نکته: می توانی به جای نام تابع، آرایه [object, method] بدهی.
هشدار: قبل از xml_parse() حتماً هندلر را تنظیم کن؛ وگرنه رویداد از دست می رود.
جزئیات فنی
- خروجی:
TRUEدر موفقیت،FALSEدر خطا. - نسخه PHP: از 4.0 به بعد.
گام های سریع
- پارسر را با
xml_parser_create()بساز. - هندلر موجودیت پردازش نشده XML را ثبت کن.
- XML را با
xml_parse()پردازش کن. - در پایان، پارسر و فایل را ببند.
جمع بندی سریع
- برای موجودیت های
NDATAاستفاده می شود. - نام، سیستم آی دی و پابلیک آی دی را می گیری.
- قبل از parse باید ست شود.
- TRUE یعنی همه چیز اوکی است.