PHP ၏ XML Parser (ပုံမှန်အားဖြင့် XML_Parser_Create () နှင့် xml_parse ကဲ့သို့သော Expat-based function များကိုအသုံးပြုသောလုပ်ငန်းဆောင်တာများ) ကိုအသုံးပြုသောအခါ XML_Parse () ()) သည် XML data blocks ကိုခွဲခြမ်းစိတ်ဖြာရန်ပရိုဂရမ်တွင်အကြိမ်ကြိမ်ခေါ်ဆိုသည်။ ခွဲခြမ်းစိတ်ဖြာခြင်းမပြုမီ parser ကိုစနစ်တကျပြန်လည်မသတ်မှတ်ခြင်းသို့မဟုတ်ပြန်လည်မတည်ဆောက်ပါက၎င်းသည်မမျှော်လင့်သောပြ problems နာများစွာကိုဖြစ်ပေါ်စေသည်။ ဤပြ problems နာများအတွက်အကြောင်းပြချက်များနှင့်၎င်းတို့ကိုမည်သို့ရှောင်ရှားရန်အကြောင်းရင်းကိုအသေးစိတ်လေ့လာကြပါစို့။
XML Parser သည်လက်ရှိခွဲခြမ်းစိတ်ဖြာခြင်း၏နက်နဲသောအရာကဲ့သို့ဖြစ်လိမ့်မည်။
ဥပမာ -
$xml1 = "<note><to>John</to></note>";
$xml2 = "<message><from>Jane</from></message>";
$parser = xml_parser_create();
// ပထမ ဦး ဆုံးသုံးသပ်ချက်
xml_parse($parser, $xml1);
// ဒုတိယ parser ကိုအသုံးပြုသည်
xml_parse($parser, $xml2); // parsing အမှားများဖြစ်ပေါ်စေနိုင်သည်!
xml_parser_free($parser);
အထက်ပါကုဒ်တွင် XML2 ဒေတာကိုဒုတိယအကြိမ်ခွဲခြမ်းစိတ်ဖြာသည့်အခါ $ parser သည် Syntax အမှားအယွင်းများ,
XML parser သည် XML_SET_ELEMEMER_HANDLER () မှတစ်ဆင့် callback function ကို setting ကိုခွင့်ပြုသည်။ ဤရွေ့ကားပြန်ခေါ်ချက်များများသောအားဖြင့်အချို့သောပြင်ပ variable တွေကိုသို့မဟုတ်ပြည်နယ်များအပေါ်အားကိုး။ အခြေအနေသို့မဟုတ်ပြည်နယ် variable များကိုမျိုးစုံအကြားစနစ်တကျသန့်ရှင်းရေးမလုပ်ပါကအချက်အလက်ရှုပ်ထွေးမှုများကိုဖြစ်ပေါ်စေသည်။
ဥပမာ -
function startElement($parser, $name, $attrs) {
echo "tag ကိုစတင်ပါ: $name\n";
}
function endElement($parser, $name) {
echo "tag tag: $name\n";
}
$parser = xml_parser_create();
xml_set_element_handler($parser, "startElement", "endElement");
$xml = "<user><name>စမ်းသပ်မှု</name></user>";
xml_parse($parser, $xml);
// ထို့နောက်အခြားစာရွက်စာတမ်းခွဲပါ
$xml2 = "<product><title>ကုန်ပစ္စည်း</title></product>";
xml_parse($parser, $xml2); // အဆိုပါ callback ကိုမလျော်ကန်စွာကိုင်တွယ်နိုင်ပါသည်
$ parser သည် ပြန်လည်မသတ်မှတ်ခြင်းမဟုတ်ဘဲ, callback ၏စည်းမျဉ်းစည်းကမ်းများသို့မဟုတ်အချို့သောပြည်တွင်းရေးအခြေအနေများသည်ပုံမှန်မဟုတ်သောကြောင့်ယုတ္တိဗေဒအပြောင်းအလဲအတွက်ရှုပ်ထွေးမှုများဖြစ်ပေါ်လာနိုင်သည်။
ကွဲပြားခြားနားသော encodings မသုံးမီ xml စာရွက်စာတမ်းများ (ဥပမာ - 8) သည် UTF-8 နှင့်အခြားတစ်ခုမှာ ISO-8859-1 ဖြစ်သည်။
$parser = xml_parser_create("UTF-8");
$xml1 = "<?xml version='1.0' encoding='UTF-8'?><data>မင်္ဂလာပါ</data>";
$xml2 = "<?xml version='1.0' encoding='ISO-8859-1'?><data>Olá</data>";
xml_parse($parser, $xml1);
xml_parse($parser, $xml2); // coding ပ conflict ိပက်ခ,အမှားတစ်ခုသတင်းပို့နိုင်ပါသည်
အထက်ပါပြ problems နာများကိုရှောင်ရှားရန် XML စာရွက်စာတမ်းအသစ်တစ်ခုသည်ခွဲခြမ်းစိတ်ဖြာပြီးနောက်အချိန်တိုင်းတွင်အကောင်းဆုံးအလေ့အကျင့်သည် parser ဥပမာတစ်ခုဖန်တီးရန်ဖြစ်သည်။
function parseXml($xmlString) {
$parser = xml_parser_create("UTF-8");
xml_parse($parser, $xmlString, true);
xml_parser_free($parser);
}
$xml1 = "<note><to>John</to></note>";
$xml2 = "<message><from>Jane</from></message>";
parseXml($xml1);
parseXml($xml2);
၎င်းသည်ပြည်နယ် 0 င်ရောက်စွက်ဖက်ခြင်း,
XML အချက်အလက်မျိုးစုံကိုပြုပြင်သည့်အခါ parser ကို "သန့်ရှင်း" ရန်အရေးကြီးသည်။ Parser ကိုတိုက်ရိုက်ပြန်လည်အသုံးပြုခြင်းသည်အရင်းအမြစ်များကိုချွေတာနိုင်ပုံရသော်လည်းရလဒ်မှာညစ်ညမ်းမှု, coding ပ conflicts ိပက်ခများနှင့်အခြားပြ problems နာများမှာအားစိုက်ထုတ်မှုမှာမထိုက်တန်ပါ။ အလုံခြုံဆုံးနည်းမှာ "၎င်းကိုတစ်ချိန်ကအသုံးပြုရန်နှင့်တစ်ချိန်ကတည်ဆောက်ပြီး၎င်းကိုခွဲထုတ်ပြီးနောက်ဖျက်ဆီးခြင်း" ဖြစ်သည်။
အကယ်. သင်သည် XML အချက်အလက်များကိုမကြာခဏလုပ်ဆောင်ရန်လိုအပ်သည့် interface တစ်ခုတည်ဆောက်နေပါကဥပမာ -
သက်ဆိုင်သောတက်(ဂ်)များ:
xml_parse