လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> XML_Parse function ကိုအသုံးပြုသောအခါမမှန်မကန် XML ဒေတာများကိုခွဲခြမ်းစိတ်ဖြာခြင်းတွင်အမှားအယွင်းများကိုမည်သို့ရှောင်ရှားနိုင်မည်နည်း။

XML_Parse function ကိုအသုံးပြုသောအခါမမှန်မကန် XML ဒေတာများကိုခွဲခြမ်းစိတ်ဖြာခြင်းတွင်အမှားအယွင်းများကိုမည်သို့ရှောင်ရှားနိုင်မည်နည်း။

M66 2025-04-28

PHP တွင် XML ဒေတာများကို PHP တွင်ထုတ်လုပ်သည့်အခါ XML_Parse () သည် xml ဒေတာများကိုဖွဲ့စည်းထားသောသတင်းအချက်အလက်များကိုဖွဲ့စည်းရန်ကူညီပေးသောဘုံလုပ်ဆောင်မှုတစ်ခုဖြစ်သည်။ သို့သော်မမှန်မကန်, မှားယွင်းသောပုံစံသို့မဟုတ် unclosed xml data အချို့နှင့်ရင်ဆိုင်ရသောအခါဤလုပ်ဆောင်ချက်သည်အမှားအယွင်းများကိုအလွယ်တကူပစ်နိုင်သည်, အစီအစဉ်တစ်ခုလုံးကိုပြတ်တောက်စေနိုင်သည်။

XML_Parse () အထူးသဖြင့်မမှန်မကန် xml ကိုကြုံတွေ့ရချိန်တွင်အမှားအယွင်းများကိုအသုံးပြုခြင်းသည်အမှားအယွင်းများကိုမည်သို့ရှောင်ရှားနိုင်မည်နည်း။ ဤတွင်အချို့သောလက်တွေ့ကျသောအကြံပြုချက်များနှင့်ကုဒ်နမူနာအချို့ကိုဖော်ပြထားသည်။

1 ။ အမှားထောက်လှမ်းရေးယန္တရားကိုဖွင့်ပါ

XML_PARSE () မသုံးမီ (), ပရိုဂရမ်ကိုတိတ်တဆိတ်မအောင်မြင်ဘဲခွဲစိတ်ကုသမှုမအောင်မြင်သည့်အခါအထူးသီးသန့်အမှားအချက်အလက်များကိုဖမ်းယူနိုင်ရန်အတွက်အမှားရှာဖွေရန်အတွက်အမှားရှာဖွေရန်အမြဲတမ်းအမှားရှာဖွေရန်ကိုဖမ်းယူနိုင်ရန်အကြံပြုသည်။

 $xml = '<root><item>အချက်များ1<item><item>အချက်များ2</item></root>'; // မမှန်သောXML

$parser = xml_parser_create();
xml_set_error_code($parser, XML_ERROR_NONE);

if (!xml_parse($parser, $xml, true)) {
    $errorCode = xml_get_error_code($parser);
    $errorMsg = xml_error_string($errorCode);
    $line = xml_get_current_line_number($parser);
    $column = xml_get_current_column_number($parser);
    echo "အမှားခွဲခြမ်းစိတ်ဖြာခြင်း:$errorMsg အတွက် $line အိုကေ,1 ။ $column စာရင်း\n";
}

xml_parser_free($parser);

2 ။ preprocessing အတွက် libxml ကို သုံးပါ

မမှန်မကန် XML ကိုပိုမိုလုံခြုံစွာထိန်းထားနိုင်ရန်အတွက်ကျွန်ုပ်တို့သည်ဒေတာများကိုကြိုတင်မသုံးရန် LibxMl အမှားအယွင်းခံထားသောနည်းလမ်းကိုသုံးနိုင်သည်

 libxml_use_internal_errors(true);

$xml = '<root><item>အချက်များ1<item><item>အချက်များ2</item></root>';

$dom = new DOMDocument();
$dom->loadXML($xml, LIBXML_NOERROR | LIBXML_NOWARNING | LIBXML_NONET | LIBXML_COMPACT | LIBXML_NOCDATA);

if (!$dom) {
    foreach (libxml_get_errors() as $error) {
        echo "LibXML အမှား:{$error->message}\n";
    }
    libxml_clear_errors();
} else {
    echo "XML အောင်မြင်စွာတင်,ခွဲခြမ်းစိတ်ဖြာရန်ဆက်လက်နိုင်ပါတယ်。\n";
}

3 ။ ပုံမှန်သို့မဟုတ် string process ကို "fix" error xml ကိုကြိုတင်ပြင်ဆင်ထားပါ။

တခါတရံတွင်ဒေတာအရင်းအမြစ်သည်မတည်ငြိမ်မှုဖြစ်သည့်ပြင်ပ APIs ကဲ့သို့သောပြင်ပ APIs များကဲ့သို့ http://api.m66.net/data.xml ကဲ့သို့ပင်။ ဤကိစ္စတွင်ကျွန်ုပ်တို့သည်ပုံမှန် (သို့) လက်စွဲနည်းစနစ်များကို အသုံးပြု. unclosed tags များသို့မဟုတ်တရားမဝင်သောဇာတ်ကောင်များကဲ့သို့သောဘုံပြ problems နာများကို ဦး စွာဖြေရှင်းနိုင်သည်။

 $xml = file_get_contents('http://api.m66.net/data.xml');

// ရိုးရှင်းသော fix:unclosed tags တွေကိုအစားထိုးလိုက်ပါ
$xml = preg_replace('/<item>([^<]*)<item>/', '<item>$1</item><item>', $xml);

// 然后再进အိုကေ解析
$parser = xml_parser_create();
if (!xml_parse($parser, $xml, true)) {
    echo "နေဆဲတည်ရှိ XML အမှား,၎င်းကိုကိုင်တွယ်ရန်အခြားနည်းလမ်းများကိုကြိုးစားပါ。\n";
}
xml_parser_free($parser);

?? မှတ်စု: ဤနည်းလမ်းသည်အခြေအနေတွင်မျှော်လင့်ချက်အချို့ရှိသည့်အခြေအနေများအတွက်သင့်လျော်သည်။

4 ။ အဆင့်နိမ့်ပိုင်းခွဲခြမ်းစိတ်ဖြာခြင်းကိုအစားထိုးရန် Simplexml သို့မဟုတ် dom ကိုအသုံးပြုပါ

တစ်ခါတစ်ရံကိရိယာတစ်ခုပြောင်းလဲခြင်းသည် ပို. တည်ငြိမ်သည်။ ဥပမာအားဖြင့် Simplexml တွင်အားကောင်းသောအမှားသည်းခံမှုနှင့်ပိုမိုလွယ်ကူသည့်ကုဒ်များရှိသည်။

 $xml = file_get_contents('http://api.m66.net/data.xml');

libxml_use_internal_errors(true);
$simpleXml = simplexml_load_string($xml);

if ($simpleXml === false) {
    echo "SimpleXML ခွဲခြမ်းစိတ်ဖြာခြင်းမအောင်မြင်ပါ,အမှား如下:\n";
    foreach (libxml_get_errors() as $error) {
        echo $error->message;
    }
} else {
    echo "SimpleXML အောင်မြင်သောခွဲခြမ်းစိတ်ဖြာ!\n";
}

အကျဉ်းချုပ်

XML_Parse ကို သုံးသောအခါမမှန်မကန် XML ကိုရင်ဆိုင်ရန်အကောင်းဆုံးအလေ့အကျင့်များ -

  • ပြ problems နာများကိုလွယ်ကူချောမွေ့စေရန်အမှားအယွင်းများကိုဖွင့်ပါ။

  • preprocessing အဖြစ် libxml အမှား - သည်းခံစိတ် parsing ကိုသုံးပါ။

  • လိုအပ်ပါက XML ကိုပြုပြင်ရန်ပုံမှန်သို့မဟုတ် domdocument ကိုသုံးပါ။

  • အကယ်. အချက်အလက်ပုံစံသည်ထိန်းချုပ်မှုမထိန်းချုပ်နိုင်ပါကပိုမိုကောင်းမွန်သောအမှားခံနိုင်ရည်ရှိသောခွဲစိတ်ကုသမှုမျိုးကိုပိုမိုအသုံးပြုပါ။

XML format သည်ကျိုးကြောင်းဆီလျော်ပြီး XML_PARSE () ကို အသုံးပြု. XML_Parse () ကို အသုံးပြု. ကုဒ်ကိုတိုးတက်အောင်လုပ်နိုင်ပြီး 0 န်ဆောင်မှုတစ်ခုလုံးကိုဖြိုခွဲခြင်းကြောင့်အမှားခံနိုင်ရည်ကိုရှောင်ရှားနိုင်လိမ့်မည်။

ဤအကြံပြုချက်များသည်သင့်အား "လှည့်ကွက်" XML ဒေတာအမျိုးမျိုးကိုလုပ်ဆောင်ရန်ကူညီနိုင်သည်ဟုမျှော်လင့်ပါသည်။ အကယ်. သင်သည်သီးခြားခွဲခြမ်းစိတ်ဖြာအမှားများကိုသင်ကြုံတွေ့ရပါက XML အကြောင်းအရာများကို post နိုင်သည်။ သင့်အတွက်၎င်းကိုခွဲခြမ်းစိတ်ဖြာနိုင်သည်

  • သက်ဆိုင်သောတက်(ဂ်)များ:

    xml_parse