PHP တွင် XML ဒေတာများကိုလုပ်ဆောင်သောအခါ, အမှားကိုင်တွယ်သည့်ယန္တရား၏ကြံ့ခိုင်မှုသည်ပရိုဂရမ်၏တည်ငြိမ်အေးချမ်းရေးနှင့်ထိန်းသိမ်းခြင်းတို့တွင်အရေးပါသောအခန်းကဏ် plays မှပါ 0 င်သည်။ PHP သည် XML_set_Ennamonface_handler နှင့် XML_set_error_Handler တို့နှင့် xml_set_error_handler တို့တွင်ပိုမိုအဆင့်မြင့်သော်လည်းအလွန်လက်တွေ့ကျသော interface များဖြစ်သည်။ အကယ်. ဤလုပ်ဆောင်ချက်နှစ်ခုကိုကျိုးကြောင်းဆီလျော်စွာအသုံးပြုသည်ဆိုပါက XML parsing အမှားများကိုဖမ်းယူနိုင်သည့်စွမ်းရည်ကိုရှာဖွေရန်,
XML_SESS_END_EnNamespace_Decl_Handler function ကို XML parser သည် namespace ကြေငြာချက်၏အဆုံးကိုတွေ့သောအခါ callback function ကိုဖြစ်ပေါ်စေရန်အသုံးပြုသည်။ ၎င်း၏ပုံမှန်အသုံးပြုမှုမှာအောက်ပါအတိုင်းဖြစ်သည် -
$parser = xml_parser_create();
function endNamespaceHandler($parser, $prefix) {
echo "namespace ၏အဆုံး:$prefix\n";
}
xml_set_end_namespace_decl_handler($parser, "endNamespaceHandler");
ဤလုပ်ငန်းသည်ဆပ်ပြာ (သို့) RSS ၏ခွဲခြမ်းစိတ်ဖြာခြင်းကဲ့သို့သော XML ဖိုင်များနှင့်အတူ Names ဖိုင်များနှင့်ဆက်ဆံရာတွင်ဤလုပ်ဆောင်မှုသည်အထူးအရေးကြီးသည်။ Namespace ကြေငြာချက်၏အဆုံးကိုကြားဖြတ်ခြင်းအားဖြင့်၎င်းအခြေအနေတွင်အခြေအနေ,
တင်းကြပ်စွာပြောဆိုခြင်းသည် PHP တွင် XML_SEST_ERROR_HANDLER ဟုတိုက်ရိုက်အမည်ရှိ function မရှိပါ။ သို့ရာတွင်ကျွန်ုပ်တို့သည် XML အမှားများကို LibxMl_Internal_Erues (True) ဖြင့်ဖမ်းယူနိုင်ပြီးအသေးစိတ်အမှားအချက်အလက်များရရှိရန် LibxMl_get_Encors () ကို သုံးနိုင်သည်။ XML parser နှင့် တွဲဖက်. အသုံးပြုပါက၎င်းကိုအောက်ပါနည်းအတိုင်းလိုက်နာနိုင်သည်။
libxml_use_internal_errors(true);
$xmlString = '<root><unclosedTag></root>';
$doc = simplexml_load_string($xmlString);
if ($doc === false) {
foreach (libxml_get_errors() as $error) {
echo "XML အမှား:[{$error->line}] {$error->message}\n";
}
libxml_clear_errors();
}
အကယ်. သင်သည် SAX-based xml_parser_ * နည်းလမ်းကိုအသုံးပြုနေသည်ဆိုလျှင်သင်သည် XML_GEget_error_code () နှင့် xml_error_string () နှင့် xml_error_String () နှင့် xml_error_string () ကို သုံးနိုင်သည်။ ဥပမာအားဖြင့်:
$parser = xml_parser_create();
$success = xml_parse($parser, "<root><unclosed></root>");
if (!$success) {
$errorCode = xml_get_error_code($parser);
$errorMsg = xml_error_string($errorCode);
echo "ခွဲခြမ်းစိတ်ဖြာခြင်းမအောင်မြင်ပါ:$errorMsg\n";
}
xml_parser_free($parser);
XML_SESSESS_END_ENDOST_ENDOFT_DECL_Handler ကို ပေါင်းစပ်ခြင်းနှင့်အမှားအယွင်းများကိုအခြေခံသည့်ယန္တရားကိုပေါင်းစပ်ခြင်းအားဖြင့်ကျွန်ုပ်တို့သည်အောက်ပါပန်းတိုင်များကိုကျွန်ုပ်တို့ရရှိနိုင်ပါသည်။
Namespace အမှားများကိုစောစီးစွာ detect : namespace အမှားများသည်မကြာခဏဆိုသလို XML တရားမဝင်တရားမဝင်ခြင်းအတွက်အကြောင်းပြချက်များထဲမှတစ်ခုဖြစ်သည်။
အမှားအယွင်းများမဖြစ်ပွားမီအခြေအနေကိုရှင်းလင်းပါ ။ နောက်ဆက်တွဲခွဲခြမ်းစိတ်ဖြာမှုမအောင်မြင်ပါက၎င်းသည်သက်သေအထောက်အထားများအပေါ်တွင်မူတည်နိုင်သည်။
အသုံးပြုသူအတွက်လွယ်ကူသောအမှားရလဒ်များကိုပေးရန် - XML_GEget_current_line_number_number_number () , ပိုမိုတိကျသောအမှားအယွင်းများကိုသတင်းအချက်အလက်နှင့်အတူကူညီသည်။
ဤတွင်ပေါင်းစပ်အသုံးပြုခြင်း၏ပြည့်စုံသောဥပမာတစ်ခုဖြစ်သည်။
function endNamespaceHandler($parser, $prefix) {
echo "namespace ၏အဆုံး: $prefix\n";
}
$parser = xml_parser_create_ns();
xml_set_end_namespace_decl_handler($parser, "endNamespaceHandler");
$xml = <<<XML
<root xmlns:h="http://gitbox.net/html">
<h:table>
<h:tr>
<h:td>ကေြနပ်သော</h:td>
</h:tr>
</h:table>
</root
XML;
if (!xml_parse($parser, $xml, true)) {
$errorCode = xml_get_error_code($parser);
$line = xml_get_current_line_number($parser);
$message = xml_error_string($errorCode);
echo "解析အမှား [1 ။{$line}အိုကေ]: $message\n";
}
xml_parser_free($parser);
ဤဥပမာတွင်ကျွန်ုပ်တို့သည် namespace အဆုံးနှင့်အတူကိုင်တွယ်သူတစ် ဦး ကိုသတ်မှတ်ပြီးခွဲခြမ်းစိတ်ဖြာမှုမအောင်မြင်သည့်အခါအမှားအယွင်းတစ်ခုပေးသည်။ ဥပမာတွင် XML သည်တမင်တကာရေးသားထားသောမှားယွင်းသောအမှားအယွင်းများ (တံခါးပိတ်သင်္ကေတပျောက်ဆုံးနေသည်), ယုတ္တိဗေဒကိုင်တွယ်ပုံကိုဖြစ်ပေါ်စေသည်။
နေ့စဉ်ဖွံ့ဖြိုးတိုးတက်မှုတွင် XML အမှားများကိုမကြာခဏဝှက်ထားလေ့ရှိပြီးကြီးမားသောသက်ရောက်မှုရှိသည်။ XML_Set_Ennonface_Decl_Handler ကို XML_Get_error_Error_code နှင့် libxml_get_Ergors စသည့်လုပ်ဆောင်ချက်များကိုကိုင်တွယ်ခြင်းဖြင့်အမှားကိုင်တွယ်ခြင်းဖြင့်ပြုလုပ်နိုင်သည်။ အထူးသဖြင့် namespace-intensive XML စာရွက်စာတမ်းများနှင့်ဆက်ဆံရာတွင်ဤနည်းလမ်းသည်ပိုမိုခိုင်မာသောတည်ငြိမ်မှုနှင့်ထိန်းသိမ်းမှုကိုပေးနိုင်ပြီး PHP developer များလျစ်လျူရှုနိုင်သည့်လက်တွေ့ကျသောမဟာဗျူဟာကိုပေးနိုင်သည်။