handler عنصر (xml_set_element_handler)
«هندلر عنصر (Element Handler)» یعنی تابع واکنشی ساده. پارسر (Parser) هنگام شروع و پایان هر تگ، این توابع را صدا می زند. با xml_set_element_handler() می گوییم کدام تابع برای شروع و پایان عنصر اجرا شود.
xml_set_element_handler چیست؟
این تابع دو هندلر ثبت می کند: یکی برای شروع عنصر، یکی برای پایان عنصر. بنابراین می توانیم نام تگ و ویژگی ها را بگیریم و خروجی بسازیم.
گام های عملی سریع
- یک پارسر با
xml_parser_create()بساز. - تابع شروع و پایان عنصر را تعریف کن.
xml_set_element_handler()را برای هر دو وصل کن.- برای متن، یک هندلر کاراکتری هم تنظیم کن.
- فایل XML را بخوان و با
xml_parse()پردازش کن.
<?php
$parser = xml_parser_create();
function start($parser, $element_name, $element_attrs) {
switch ($element_name) {
case "NOTE":
echo "NOTE<br>";
break;
case "TO":
echo "To: ";
break;
case "FROM":
echo "From: ";
break;
case "HEADING":
echo "Heading: ";
break;
case "BODY":
echo "Message: ";
break;
}
}
function stop($parser, $element_name) {
echo "<br>";
}
function char($parser, $data) {
echo $data;
}
xml_set_element_handler($parser, "start", "stop");
xml_set_character_data_handler($parser, "char");
$fp = fopen("note.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);
نکته: آرگومان های start و end می توانند آرایه باشند؛ یعنی شیء و نام متد.
نمونه با شیء و متد
<?php
class Reader {
public function onStart($parser, $name, $attrs) {
echo "<" . $name . ">";
}
public function onEnd($parser, $name) {
echo "</" . $name . ">";
}
}
$parser = xml_parser_create();
$r = new Reader();
xml_set_element_handler($parser, [$r, "onStart"], [$r, "onEnd"]);
$xml = "<note><to>A</to></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 برای پردازش.
- start: تابع شروع عنصر با سه ورودی: پارسر، نام، ویژگی ها.
- end: تابع پایان عنصر با دو ورودی: پارسر، نام.
- بازگشت: همیشه مقدار
TRUEبرمی گردد.
هشدار: نام عناصر معمولاً با حروف بزرگ می آیند؛ اما به منبع بستگی دارد.
مطالعه بیشتر
برای متن بین تگ ها این صفحه را ببین: هندلر داده کاراکتری XML. همچنین هندلر پیش فرض را اینجا ببین: هندلر پیش فرض XML.
جمع بندی سریع
- شروع و پایان عنصر را مدیریت می کند.
- نام و ویژگی های تگ را می گیرد.
- می تواند شیء و متد بگیرد.
- مقدار بازگشتی همیشه TRUE است.