external entity ref handler (xml_set_external_entity_ref_handler)
اینجا «هندلر ارجاع موجودیت خارجی» را می بینیم. «موجودیت خارجی (External Entity)» بخشی از XML است که از فایل دیگری می آید. وقتی پارسر چنین چیزی ببیند، این هندلر اجرا می شود. مثل وقتی معلم، اسم دانش آموز مهمان را می خواند.
xml_set_external_entity_ref_handler چیست؟
این تابع مشخص می کند هنگام یافتن موجودیت خارجی، چه تابعی صدا شود. تابع شما پنج ورودی دارد؛ از نام موجودیت تا شناسه عمومی و سیستمی.
گام های سریع استفاده
- یک پارسر با
xml_parser_create()بساز. - تابع هندلر با پنج ورودی تعریف کن.
- با
xml_set_external_entity_ref_handler()ثبتش کن. - در کنار آن، هندلر متن هم تنظیم کن.
- XML را بخوان و پردازش کن.
<?php
$parser = xml_parser_create();
function char_data($parser, $data) {
echo $data;
}
function ext_ent_handler($parser, $name, $base, $system_id, $public_id) {
echo "Entity: " . $name . "\n";
echo "SystemID: " . $system_id . "\n";
echo "PublicID: " . $public_id . "\n";
return true;
}
xml_set_character_data_handler($parser, "char_data");
xml_set_external_entity_ref_handler($parser, "ext_ent_handler");
$fp = fopen("note_entity.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);
نکته: پارامتر handler می تواند آرایه باشد؛ یعنی شیء و نام متد.
پارامترها و مقدار بازگشتی
- parser: پارسر XML که رویداد را ارسال می کند.
- handler: تابع رویداد با پنج ورودی:
$parser،$name،$base،$system_id،$public_id. - بازگشت: موفقیت
TRUEو خطاFALSE.
ارتباط های مهم
برای شروع و پایان تگ ها ببین: xml_set_element_handler. برای متن بین تگ ها ببین: xml_set_character_data_handler. همچنین پیوند داخلی با کلیدواژه: هندلر ارجاع موجودیت خارجی.
جمع بندی سریع
- برای موجودیت خارجی استفاده می شود.
- تابع هندلر پنج ورودی دارد.
- نتیجه درست یعنی
TRUEاست. - می توانی هندلر متن هم ثبت کنی.