လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> XML_PARSESSE သည်အသိုက်အမှတ်အသားများကိုမှန်ကန်စွာကိုင်တွယ်။ မရပါ။ ဘုံအမှားအယွင်းများနှင့်ဖြေရှင်းနည်းများ

XML_PARSESSE သည်အသိုက်အမှတ်အသားများကိုမှန်ကန်စွာကိုင်တွယ်။ မရပါ။ ဘုံအမှားအယွင်းများနှင့်ဖြေရှင်းနည်းများ

M66 2025-04-24

XML ဒေတာများကို PHP ကိုအသုံးပြုသောအခါ XML_PARSE () သည် PHP ၏ XML parser extension (Expat အပေါ် အခြေခံ. ) PHP ၏ XML parser extension ပိုင်သည့် PHP သည်အဓိကလုပ်ဆောင်ချက်ဖြစ်သည်။ သို့သော် developer များစွာသည်အသိုက် tags များကိုခွဲခြမ်းစိတ်ဖြာသည့်အခါမှန်ကန်စွာကိုင်တွယ်နိုင်သည့်အခြေအနေများမကြာခဏကြုံတွေ့ရလေ့ရှိသည်။ ဤဆောင်းပါးသည်သင့်အားဤပြ problem နာ၏အကြောင်းရင်းများကိုနက်နက်နဲနဲနားလည်ရန်နှင့်လက်တွေ့ကျသောဖြေရှင်းနည်းများကိုပေးလိမ့်မည်။

1 ။ XML_Parse ၏လုပ်ငန်းနိယာမကိုနိဒါန်း

XML_Parse () သည် XML စာရွက်စာတမ်းများကိုလုပ်ဆောင်ရန် Event-Driven Model ကိုအသုံးပြုသည်။ parser သည် start tag သို့မဟုတ်ဇာတ်ကောင်အချက်အလက်များကိုဖတ်ရှုသောအခါသက်ဆိုင်ရာ callback function ကိုခေါ်လိမ့်မည်။

နမူနာနမူနာကုဒ်သည်အောက်ပါအတိုင်းဖြစ်သည် -

 $parser = xml_parser_create();

xml_set_element_handler($parser, "startElement", "endElement");
xml_set_character_data_handler($parser, "characterData");

$data = '<book><title>PHP Guide</title><author>John</author></book>';
xml_parse($parser, $data, true);
xml_parser_free($parser);

ဤဥပမာတွင်ခွဲခြမ်းစိတ်ဖြာခြင်းသည် startelform , စရိုက်လက္ခဏာများ နှင့် နောက်ဆက်တွဲ callback function များကိုဖြစ်ပေါ်စေလိမ့်မည်။

2 ။ XML_PARSSESSE ကိုအဘယ်ကြောင့်မကိုင်တွယ်နိုင်ပါ။

အဓိကအကြောင်းပြချက်များမှာအောက်ပါအတိုင်းဖြစ်သည် -

1 ။ callback function ကိုလုပ်ဆောင်မှုအပြောင်းအလဲနဲ့၏ယုတ္တိဗေဒသည်မပြည့်စုံပါ

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

ဥပမာအားဖြင့်, အောက်ပါကုဒ်သည်အသိုက် node များကိုမှန်ကန်စွာကိုင်တွယ်ရန်ပျက်ကွက်သည်။

 function startElement($parser, $name, $attrs) {
    global $currentTag;
    $currentTag = $name;
}

function characterData($parser, $data) {
    global $currentTag;
    echo "$currentTag: $data\n";
}

အသိုက်အမှတ်အသားများတွင် $ currenttag ကို အဆက်မပြတ်ပြန်လည်ရေးသားခြင်းသည်အမြဲတမ်းရေးကူးယူလိမ့်မည်။

2 ။ stack ဖွဲ့စည်းပုံကိုအသိုက်ပြည်နယ်ကိုကယ်တင်ရန်မသုံးပါ

အသိုက် XML ကိုခွဲခြမ်းစိတ်ဖြာနိုင်ရန်အတွက်လက်ရှိ tag လမ်းကြောင်းကိုထိန်းသိမ်းရန် stack ကိုအသုံးပြုရန်အကြံပြုသည်။

 $tagStack = [];

function startElement($parser, $name, $attrs) {
    global $tagStack;
    array_push($tagStack, $name);
}

function endElement($parser, $name) {
    global $tagStack;
    array_pop($tagStack);
}

function characterData($parser, $data) {
    global $tagStack;
    $path = implode(' > ', $tagStack);
    echo "[$path] $data\n";
}

ဤကုဒ်သည်အသိုက် tags များ၏အဆင့်ဆင့်ကိုပိုမိုရှင်းလင်းစွာဖော်ပြနိုင်သည်။

 <article>
    <header><title>သတင်းစာ</title></header>
    <body>အကြောင်းအရာအပိုင်း</body>
</article>

output ကိုဖြစ်လိမ့်မည်:

 [ARTICLE > HEADER > TITLE] သတင်းစာ
[ARTICLE > BODY] အကြောင်းအရာအပိုင်း

3 ။ ဒေတာမှားယွင်းစွာကြိုးစားသို့မဟုတ်မပြည့်စုံသည်

XML_Parse သို့အချက်အလက်များသည်မပြည့်စုံသောသို့မဟုတ် is_final parameter သည် (i.e. နောက်ဆုံး parameter) အဖြစ်မှန်ကန်စွာမှတ်သားထားပါက မှန်ကန်စွာ မှတ်သားထားပါကမှန်ကန်စွာမှတ်သားထားပါက၎င်းမှာလည်းမအောင်မြင်ပါ။

 xml_parse($parser, $data, true); // တတိယ parameter သည်ဖြစ်ရမည် true ဒေတာပြီးပြည့်စုံကြောင်းဖော်ပြသည်

3 ။

အကြံပြုချက်အရှိဆုံးနည်းလမ်းမှာအဆင့်မြင့် XML parser ကိုအသုံးပြုရန်ဖြစ်သည်။

1 ။ Simplexml

 $xml = simplexml_load_string('<book><title>PHP Guide</title></book>');
echo $xml->title; // ထုတ်လုပ်ခြင်း: PHP Guide

2 ။ domdocument

 $doc = new DOMDocument();
$doc->loadXML('<site><url>https://m66.net</url></site>');
$nodes = $doc->getElementsByTagName('url');
echo $nodes->item(0)->nodeValue; // ထုတ်လုပ်ခြင်း: https://m66.net

ဤခွဲခြမ်းစိတ်ဖြာသူများသည်သင့်အတွက် node များ၏အသိုက်ဖွဲ့စည်းပုံကိုကိုင်တွယ်ပြီးကုဒ်သည်ရှင်းလင်းပြီးပြုပြင်ထိန်းသိမ်းမှုသည်ပိုမိုလွယ်ကူသည်။

4 ။ အကျဉ်းချုပ်နှင့်အကြံပြုချက်များ

  • XML_Parse () သည် အဖြစ်အပျက်များကိုမောင်းနှင်သောမော်ဒယ်များကိုအသုံးပြုသည်။

  • လက်ရှိ tag လမ်းကြောင်းကိုခြေရာခံရန် stack stack stack stack stack stack ကိုအသုံးပြုရန်အကြံပြုသည်။

  • ပရောဂျက်များတွင်ဖြစ်ရပ်များကိုမောင်းနှင်သည့်နည်းစနစ်များကိုအထူးမလိုအပ်ပါက Simplexml သို့မဟုတ် DomDocument ကိုအသိုက် XML ကိုကိုင်တွယ်ရန်အကြံပြုသည်။

  • ဝိညာဏ်ရှောင်ရှားရန်ဝင်လာသောအချက်အလက်များ၏သမာဓိကိုအာရုံစိုက်ပါ။

XML parsing တကယ်တော့ရှုပ်ထွေးမဟုတ်ပါဘူး။ သော့ချက်မှာမှန်ကန်သောကိရိယာကိုရွေးချယ်ပြီး၎င်း၏အခြေခံမူများကိုနားလည်ရန်ဖြစ်သည်။ အမှန်တကယ်ဖွံ့ဖြိုးတိုးတက်မှုတွင်အသိုက် XML ပြ issues နာများကိုပိုမိုကောင်းမွန်စွာကိုင်တွယ်ဖြေရှင်းနိုင်ရန်ဤဆောင်းပါးသည်သင့်အားကူညီနိုင်လိမ့်မည်ဟုကျွန်ုပ်မျှော်လင့်ပါသည်။