پایان namespace decl handler (xml_set_end_namespace_decl_handler)
اینجا با «هندلر پایان فضای نام (End Namespace Handler)» آشنا می شویم. «فضای نام (Namespace)» یک برچسب برای تفکیک تگ هاست. وقتی از محدوده یک فضای نام خارج می شویم، این هندلر صدا می خورد. پس می توانیم پایان آن را ثبت کنیم.
xml_set_end_namespace_decl_handler چیست؟
این تابع مشخص می کند هنگام خروج از محدوده یک فضای نام، کدام تابع اجرا شود. این اجرا پس از هندلر پایان تگ همان عنصر انجام می شود. بنابراین ترتیب رویدادها منطقی باقی می ماند.
گام های عملی سریع
- یک پارسر با
xml_parser_create()بساز. - تابع هندلر با دو ورودی تعریف کن.
- با
xml_set_end_namespace_decl_handler()هندلر را ثبت کن. - XML را پردازش کن و خروجی را ببین.
<?php
$parser = xml_parser_create();
function onEndNs($parser, $prefix) {
echo "End NS: " . $prefix . "\n";
}
xml_set_end_namespace_decl_handler($parser, "onEndNs");
$xml = "<root xmlns:x=\"urn:test\"><x:a>T</x:a></root>";
$ok = xml_parse($parser, $xml, true);
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);
نکته: پارامتر handler می تواند آرایه باشد؛ یعنی شیء و نام متد.
پارامترها و مقدار بازگشتی
- parser: پارسر XML که رویدادها را تولید می کند.
- handler: تابع رویداد با دو ورودی:
$parserو$prefix. - بازگشت: در موفقیت
TRUEو در خطاFALSE.
اشتباهات رایج و ترفندها
- امضای تابع اشتباه است؛ دقیقاً دو ورودی بده.
- پیام خطا و شماره خط را چاپ کن.
- پس از پردازش، پارسر را آزاد کن.
مطالعه بیشتر
برای مدیریت شروع و پایان عنصر ها نگاه کن به: handler عنصر XML. همچنین برای متن بین تگ ها ببین: handler داده کاراکتری.
جمع بندی سریع
- هنگام خروج از فضای نام اجرا می شود.
- تابع هندلر دو ورودی دارد.
- پس از پایان تگ عنصر صدا می خورد.
- نتیجه موفق
TRUEاست.