handler داده کاراکتری (xml_set_character_data_handler)
با «هندلر داده کاراکتری (Character Data Handler)» کار می کنیم. وقتی پارسر (Parser) متن بین تگ ها را دید، این هندلر صدا می خورد. بنابراین می توانیم متن خام XML را چاپ یا پردازش کنیم. تمرکز ما روی تابع xml_set_character_data_handler() است.
xml_set_character_data_handler چیست؟
این تابع به پارسر می گوید برای متن ها کدام تابع را اجرا کند. «هندلر (Handler)» یک تابع واکنشی ساده است. بنابراین هر متن پیدا شود، همان تابع اجرا می شود.
گام های عملی سریع
- یک پارسر با
xml_parser_create()بساز. - تابع هندلر را با دو ورودی تعریف کن.
- هندلر را با
xml_set_character_data_handler()ثبت کن. - فایل XML را بخوان و با
xml_parse()پردازش کن.
<?php
$parser = xml_parser_create();
function char($parser, $data) {
echo $data;
}
xml_set_character_data_handler($parser, "char");
$fp = fopen("note.xml", "r");
while ($data = fread($fp, 4096)) {
$done = feof($fp);
$ok = xml_parse($parser, $data, $done);
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 می تواند آرایه باشد. یعنی شیء و نام متد.
ثبت هندلر با شیء و متد
<?php
class Reader {
public function onText($parser, $data) {
echo trim($data);
}
}
$parser = xml_parser_create();
$reader = new Reader();
xml_set_character_data_handler($parser, [$reader, "onText"]);
$xml = "<note>Hello</note>";
$ok = xml_parse($parser, $xml, true);
if (!$ok) {
$msg = xml_error_string(xml_get_error_code($parser));
$line = xml_get_current_line_number($parser);
die($msg . " at line " . $line);
}
xml_parser_free($parser);
پارامترها و بازگشت
- parser: نمونه پارسر XML برای پردازش.
- handler: نام تابع یا آرایه شیء و متد.
- بازگشت: همیشه مقدار
TRUEبرمی گردد.
هشدار: تابع هندلر دقیقاً دو ورودی دارد: $parser و $data.
اشتباهات رایج و ترفندها
- چاپ فاصله های اضافی متن: از
trim()استفاده کن. - فراموشی آزادسازی پارسر:
xml_parser_free()را فراموش نکن. - به خطاها دقت کن و شماره خط را چک کن.
مطالعه بیشتر
برای شروع ساده XML این صفحه را ببین: آموزش XML در PHP. همچنین درباره پارسر و هندلرها این بخش کمک می کند: پارسر XML و هندلرها.
جمع بندی سریع
- این تابع هندلر متن XML را ثبت می کند.
- هندلر دو ورودی دارد و ساده است.
- می توان شیء و متد هم داد.
- همیشه TRUE برمی گردد.
- پس از کار، پارسر را آزاد کن.