processing instruction handler (xml_set_processing_instruction_handler)
اینجا با «هندلر دستور پردازش XML» آشنا می شوی. «هندلر (Handler)» یعنی تابع واکنش گر. «دستور پردازش (Processing Instruction/PI)» پیام مخصوص داخل XML است. مثل یادداشت کنار برگه امتحان که به نرم افزار می گوید چه کند.
کاربرد هندلر دستور پردازش XML
تابع xml_set_processing_instruction_handler() می گوید: وقتی PI دیدی، این تابع را صدا بزن. «هدف (Target)» نام دستور است. «داده (Data)» متن همراه آن است. بنابراین رویداد را می گیری و واکنش نشان می دهی.
برای متن های عادی، از هندلر داده کاراکتری کمک بگیر. همچنین برای کار شی گرا، اتصال پارسر به شیء را ببین.
سینتکس هندلر دستور پردازش XML
xml_set_processing_instruction_handler($parser, $handler);
نمونه کد عملی با PI
پارسر می سازیم. سپس هندلر داده و هندلر دستور پردازش XML را ست می کنیم. بعد فایل را تکه تکه parse می کنیم.
<?php
$parser = xml_parser_create();
function char($parser, $data) {
echo $data;
}
function pi_handler($parser, $target, $data) {
echo "Target: " . $target . "<br />";
echo "Data: " . $data . "<br />";
}
xml_set_character_data_handler($parser, "char");
xml_set_processing_instruction_handler($parser, "pi_handler");
$fp = fopen("note_pi.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);
?>
نمونه PI داخل سند XML
این PI یک استایل شیت را به XML وصل می کند.
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="default.xsl" type="text/xml"?>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
پارامترها
parser: پارسر XML فراخواننده هندلر.handler: نام تابع واکنش گر با سه پارامتر.
امضای تابع هندلر
$parser: خود پارسر.$target: هدف PI.$data: داده PI.
نکته: می توانی به جای نام تابع، آرایه [object, method] بدهی.
هشدار: قبل از xml_parse() حتما هندلرها را ست کن. وگرنه رویداد از دست می رود.
جزئیات فنی
- خروجی:
TRUEدر موفقیت،FALSEدر خطا. - نسخه PHP: از 4.0 به بعد.
گام های سریع اجرا
- پارسر را با
xml_parser_create()بساز. - هندلر داده و هندلر دستور پردازش XML را تنظیم کن.
- فایل را تکه تکه با
xml_parse()پردازش کن. - در پایان، پارسر را آزاد کن.
جمع بندی سریع
- PI بین <? و ?> قرار می گیرد.
- هدف و داده PI جداگانه اند.
- هندلر رویداد PI را می گیرد.
- ست کردن قبل از parse ضروری است.