XML ဒေတာများကို PHP ကိုအသုံးပြုသောအခါ XML_PARSE () သည် PHP ၏ XML parser extension (Expat အပေါ် အခြေခံ. ) PHP ၏ XML parser extension ပိုင်သည့် PHP သည်အဓိကလုပ်ဆောင်ချက်ဖြစ်သည်။ သို့သော် developer များစွာသည်အသိုက် tags များကိုခွဲခြမ်းစိတ်ဖြာသည့်အခါမှန်ကန်စွာကိုင်တွယ်နိုင်သည့်အခြေအနေများမကြာခဏကြုံတွေ့ရလေ့ရှိသည်။ ဤဆောင်းပါးသည်သင့်အားဤပြ problem နာ၏အကြောင်းရင်းများကိုနက်နက်နဲနဲနားလည်ရန်နှင့်လက်တွေ့ကျသောဖြေရှင်းနည်းများကိုပေးလိမ့်မည်။
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 များကိုဖြစ်ပေါ်စေလိမ့်မည်။
အဓိကအကြောင်းပြချက်များမှာအောက်ပါအတိုင်းဖြစ်သည် -
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 ကို အဆက်မပြတ်ပြန်လည်ရေးသားခြင်းသည်အမြဲတမ်းရေးကူးယူလိမ့်မည်။
အသိုက် 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] အကြောင်းအရာအပိုင်း
XML_Parse သို့အချက်အလက်များသည်မပြည့်စုံသောသို့မဟုတ် is_final parameter သည် (i.e. နောက်ဆုံး parameter) အဖြစ်မှန်ကန်စွာမှတ်သားထားပါက မှန်ကန်စွာ မှတ်သားထားပါကမှန်ကန်စွာမှတ်သားထားပါက၎င်းမှာလည်းမအောင်မြင်ပါ။
xml_parse($parser, $data, true); // တတိယ parameter သည်ဖြစ်ရမည် true ဒေတာပြီးပြည့်စုံကြောင်းဖော်ပြသည်
အကြံပြုချက်အရှိဆုံးနည်းလမ်းမှာအဆင့်မြင့် XML parser ကိုအသုံးပြုရန်ဖြစ်သည်။
$xml = simplexml_load_string('<book><title>PHP Guide</title></book>');
echo $xml->title; // ထုတ်လုပ်ခြင်း: PHP Guide
$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 များ၏အသိုက်ဖွဲ့စည်းပုံကိုကိုင်တွယ်ပြီးကုဒ်သည်ရှင်းလင်းပြီးပြုပြင်ထိန်းသိမ်းမှုသည်ပိုမိုလွယ်ကူသည်။
XML_Parse () သည် အဖြစ်အပျက်များကိုမောင်းနှင်သောမော်ဒယ်များကိုအသုံးပြုသည်။
လက်ရှိ tag လမ်းကြောင်းကိုခြေရာခံရန် stack stack stack stack stack stack ကိုအသုံးပြုရန်အကြံပြုသည်။
ပရောဂျက်များတွင်ဖြစ်ရပ်များကိုမောင်းနှင်သည့်နည်းစနစ်များကိုအထူးမလိုအပ်ပါက Simplexml သို့မဟုတ် DomDocument ကိုအသိုက် XML ကိုကိုင်တွယ်ရန်အကြံပြုသည်။
ဝိညာဏ်ရှောင်ရှားရန်ဝင်လာသောအချက်အလက်များ၏သမာဓိကိုအာရုံစိုက်ပါ။
XML parsing တကယ်တော့ရှုပ်ထွေးမဟုတ်ပါဘူး။ သော့ချက်မှာမှန်ကန်သောကိရိယာကိုရွေးချယ်ပြီး၎င်း၏အခြေခံမူများကိုနားလည်ရန်ဖြစ်သည်။ အမှန်တကယ်ဖွံ့ဖြိုးတိုးတက်မှုတွင်အသိုက် XML ပြ issues နာများကိုပိုမိုကောင်းမွန်စွာကိုင်တွယ်ဖြေရှင်းနိုင်ရန်ဤဆောင်းပါးသည်သင့်အားကူညီနိုင်လိမ့်မည်ဟုကျွန်ုပ်မျှော်လင့်ပါသည်။