notation decl handler (xml_set_notation_decl_handler)
می خواهی با «هندلر اعلان نماد XML» آشنا شوی؟ این تابع یک «هندلر (Handler)» یعنی تابع واکنش گر تعیین می کند. هر وقت «اعلان نماد (Notation Declaration)» در XML دیده شد، همان لحظه این هندلر صدا می خورد. مثل بازی ای که داور سوت می زند و تو باید سریع واکنش نشان دهی.
کاربرد و تعریف هندلر اعلان نماد XML
تابع xml_set_notation_decl_handler() برای گفتنِ «وقتی notation دیدی، فلان تابع را صدا بزن» است. «نماد (Notation)» یک اسم برای اشاره به یک نوع داده خارجی است. مثلا می گوییم فایل خارجی از نوع PDF است. parser این را می بیند و هندلر را صدا می زند.
برای داده های متنی داخل XML هم می توانی از هندلر داده کاراکتری کمک بگیری. برای ریزتنظیم های parser هم سر بزن به تنظیم گزینه parser.
سینتکس ساده
xml_set_notation_decl_handler($parser, $handler);
نمونه کد عملی
در این نمونه، parser می سازیم، دو هندلر می گذاریم، فایل XML را می خوانیم، و رویدادها را چاپ می کنیم.
<?php
$parser = xml_parser_create();
function char_handler($parser, $data) {
echo $data;
}
function not_decl_handler($parser, $name, $base, $system_id, $public_id) {
echo $name . "<br>";
echo $system_id . "<br>";
echo $public_id . "<br>";
}
xml_set_character_data_handler($parser, "char_handler");
xml_set_notation_decl_handler($parser, "not_decl_handler");
$fp = fopen("note_notation.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: شیء parser فعال.handler: نام تابع واکنش گر. باید پنج پارامتر بگیرد.
امضای تابع هندلر
تابع هندلر باید این ورودی ها را بپذیرد: $parser، $name، $base، $system_id، $public_id. مقدار $base فعلا همیشه رشته خالی است.
جزئیات فنی
- خروجی:
trueدر موفقیت،falseدر خطا. - نسخه PHP: از 4.0 به بعد.
نکته: می توانی به جای نام تابع، آرایه [object, method] بدهی.
هشدار: قبل از parse فایل، حتما هندلرها را تنظیم کن. وگرنه رویداد از دست می رود.
گام های سریع اجرا
- یک parser با
xml_parser_create()بساز. - تابع هندلر اعلان نماد را تعریف کن.
xml_set_notation_decl_handler()را با parser و هندلر صدا بزن.- فایل XML را باز کن و با
xml_parse()پردازش کن. - در پایان، parser را آزاد کن.
جمع بندی سریع
- هندلر اعلان نماد، رویداد notation را می گیرد.
- پنج پارامتر به هندلر می رسد.
- اول هندلر را ست کن، بعد parse کن.
- موفقیت با مقدار
trueبرمی گردد. - برای متن ها، از هندلر کاراکتری هم استفاده کن.