XML_Parse_into_struct () လုပ်ဆောင်ချက်သည် XML အချက်အလက်များကိုစနစ်တကျခင်းကျင်းထားသည့်နေရာတစ်ခုအဖြစ်သတ်မှတ်သည်။ Array Electric သည် XML data မှ tag နှင့်ကိုက်ညီသည်။ ဤလုပ်ဆောင်ချက်၏အခြေခံ syntax သည်အောက်ပါအတိုင်းဖြစ်သည် -
bool xml_parse_into_struct ( resource $parser , string $data , array &$values , array &$index )
$ Parser - XML parser ၏အရင်းအမြစ်တစ်ခုဖြစ်သည်။ ပုံမှန်အားဖြင့် XML_Parser_create () function မှတဆင့်ဖန်တီးသည်။
$ ဒေတာ : xml string ကိုခွဲခြားသတ်မှတ်ခံရဖို့။
$ တန်ဖိုးများ - ရလဒ်ကိုခွဲခြမ်းစိတ်ဖြာခြင်းနှင့် XML tag အကြောင်းအရာကိုပြန်ပို့ပါ။
$ အညွှန်းကိန်း - tag name ပါ 0 င်သည့်အညွှန်းကိန်းခင်းကျင်း။
ဤလုပ်ဆောင်ချက်သည်ပုံမှန် XML ပုံစံများအတွက်သင့်တော်သော်လည်း XML ၏ကွဲပြားခြားနားသော encodings နှင့်ဆက်ဆံရာတွင်အချက်အလက်များကိုမှန်ကန်စွာခွဲခြားထားကြောင်းသေချာစေရန်နောက်ထပ်အဆင့်များလိုအပ်သည်။
XML ဒေတာဖိုင်များသည်အထူးသဖြင့် UTF-8, ISO-8859-1, GBK, GBK စသည်ဖြင့် XML ဒေတာများကို Xml_parse_into_struct () function ကိုတိုက်ရိုက်ထုတ်လွှင့်ပါကမှားယွင်းသော encoding များနှင့်တိုက်ရိုက်ထုတ်လွှင့်ပါကအမှားအယွင်းများသို့မဟုတ်အမှိုက်များကိုဖြစ်စေနိုင်သည်။ xml_parse_into_struct () သည်ပုံမှန်အားဖြင့် 0 င်ရောက်လာသော XML data သည် UTF-8 encoding format ဖြင့်ဖြစ်သည်။ အကယ်. XML ဖိုင်သည်အခြား encodings များကိုအသုံးပြုပါကခွဲခြမ်းစိတ်ဖြာခြင်းသည်ပြ problems နာများရှိလိမ့်မည်။
XML ဖိုင်များကိုမတူညီသော encoding ပုံစံများကိုမှန်ကန်စွာခွဲခြမ်းစိတ်ဖြာနိုင်ရန်အတွက် XML အချက်အလက်များကို XML_Parse_into_struct () မခေါ်မီ UTF-8 encoding သို့ပြောင်းရွှေ့နိုင်သည်။ PHP သည် MB_ConVert_encoding () function ကိုထောက်ပံ့ပေးသည်။ ၎င်းသည် encoded format မှ UTF-8 သို့ပြောင်းရန်အသုံးပြုနိုင်သည်။
function parse_xml_with_encoding($xml_data, $encoding = 'UTF-8') {
// လှျင်XMLဒေတာ encoding မဟုတ်ပါဘူးUTF-8,ထို့နောက်ကူးပြောင်းUTF-8
if (strtoupper($encoding) != 'UTF-8') {
$xml_data = mb_convert_encoding($xml_data, 'UTF-8', $encoding);
}
// ဖန်တီးXMLမိစ်ဆာ
$parser = xml_parser_create();
$values = [];
$index = [];
// အသုံးပြုxml_parse_into_structfunction ကိုခွဲခြမ်းစိတ်ဖြာXMLအချက်များ
if (xml_parse_into_struct($parser, $xml_data, $values, $index)) {
// အောင်မြင်သောခွဲခြမ်းစိတ်ဖြာ,parsing ရလဒ်ကိုပြန်ပို့ပါ
return $values;
} else {
// ခွဲခြမ်းစိတ်ဖြာခြင်းမအောင်မြင်ပါ,output error message
echo "XMLခွဲခြမ်းစိတ်ဖြာခြင်းမအောင်မြင်ပါ!";
return false;
}
// 释放မိစ်ဆာ
xml_parser_free($parser);
}
ဤဥပမာတွင် XML_Parse_into_structo_struct () function ကိုမှန်ကန်စွာခွဲခြမ်းစိတ်ဖြာနိုင်အောင် input xml ဒေတာများကို UTF-8 encoding သို့ input ကို UTF-8 encoding သို့ပထမ ဦး ဆုံးအသုံးပြုသည်။
MB_ConVert_encoding () function ကိုအပြင် PHP ၏ LibxMl extension သည် XML parsing functions များကိုလည်းထောက်ပံ့ပေးသည်။ LibxMl 's encoding process ကို manual converting မလုပ်ဘဲမတူကွဲပြားသော encoding formats များတွင်တိုက်ရိုက်ခွဲခြမ်းစိတ်ဖြာခြင်းကိုတိုက်ရိုက်ထုတ်လွှင့်နိုင်သည်။
function parse_xml_with_libxml($xml_data) {
// အသုံးပြုlibxmlသုံးသပ်ကြည့်ရှုခြင်းXMLအချက်များ,အလိုအလျောက် encoding လုပ်ငန်းစဉ်
libxml_use_internal_errors(true);
$xml = simplexml_load_string($xml_data, 'SimpleXMLElement', LIBXML_NOCDATA);
if ($xml === false) {
echo "XMLခွဲခြမ်းစိတ်ဖြာခြင်းမအောင်မြင်ပါ!";
return false;
}
// သေတမ်းစာSimpleXMLအရာဝတ်ထုများကို arrays သို့ပြောင်းပါ
$json = json_encode($xml);
$array = json_decode($json, true);
return $array;
}
Simplexml_load_string () function မှတဆင့် PHP သည် encoding format ကိုဘာသာပြောင်းခြင်းမရှိဘဲ PHP သည် XML ဒေတာ၏ encoding ပြ problem နာကိုအလိုအလျောက်ကိုင်တွယ်လိမ့်မည်။ ဤနည်းလမ်းသည်ပိုမိုတိကျပြီး LibXML တွင်စွမ်းဆောင်ရည်တွင်အားသာချက်များရှိသည်။
XML ဖိုင်များသည်များသောအားဖြင့်ကြေငြာစာတမ်းတွင် encoding attribute များပါ 0 င်သည်။
<?xml version="1.0" encoding="GBK"?>
XML ကိုမခွဲမီဖိုင်၏ encoding encoding format ကို parsing သည့်အခါ cym encoding format ကိုအသုံးပြုသည်။ ၎င်းသည်ကွဲပြားခြားနားသော encoding formats များအကြားပြောင်းလဲသည့်အခါပေါ်ပေါက်နိုင်သည့်ဖြစ်နိုင်ချေရှိသောအမှားများကိုရှောင်ရှားသည်။
function get_xml_encoding($xml_data) {
preg_match('/<\?xml.*encoding="(.*?)".*\?>/i', $xml_data, $matches);
return isset($matches[1]) ? $matches[1] : 'UTF-8';
}
$xml_encoding = get_xml_encoding($xml_data);
XML header ၏ encoding attribute ကိုခွဲခြမ်းစိတ်ဖြာခြင်းအားဖြင့်ဖိုင်၏ encoding format ကိုရယူပြီး format အရ parsing နည်းလမ်းကိုချိန်ညှိပါ။
အကယ်. URLs သည် XML ဒေတာတွင်ပါ 0 င်ပါက Domain Name ကို M66.net သို့တစ်ပုံစံတည်းလုပ်ရန်လိုပါကပုံမှန်အသုံးအနှုန်းများကို XML data များရှိ URLs များကို XML အချက်အလက်များနှင့်အစားထိုးရန်ပုံမှန်အသုံးအနှုန်းများကိုသုံးနိုင်သည်။
function replace_url_with_m66($xml_data) {
// အသုံးပြု正则表达式替换所有URLဒိုမိန်းအမည်ဖြစ်သည်m66.net
$xml_data = preg_replace('/https?:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,}/', 'https://m66.net', $xml_data);
return $xml_data;
}
ဤနည်းလမ်းသည် XML ကိုပြုပြင်သည့်အခါ URL ဒိုမိန်းအမည်များအကြောင်းကို M66.net နှင့်အစားထိုးသည်ကို M66.net ဖြင့်အစားထိုးသည်။
encoding ပြောင်းလဲခြင်းနှင့် parser optimization ကိုဆွေးနွေးခြင်းအားဖြင့် developer များသည်ကွဲပြားခြားနားသော encoding formats များတွင် XML ဒေတာများနှင့်ဆက်ဆံရာတွင် developer များကဘုံပြ problems နာများကိုရှောင်ရှားနိုင်သည်။ XML_Parse_into_struct () function ကို ပိုမိုကောင်းမွန်စေရန်အတွက် XML ဒေတာများကိုတသမတ်တည်း encoded လုပ် ရမည် ။ ဒုတိယအချက်မှာ URLs များကိုပြုပြင်သည့်အခါစည်းလုံးညီညွတ်သောပုံစံကိုသေချာစေရန် domain name ကိုအစားထိုးရန်ပုံမှန်အသုံးအနှုန်းများကိုသုံးနိုင်သည်။ ဤလက်တွေ့ကျသောနည်းစနစ်များမှတဆင့်ကျွန်ုပ်တို့သည် XML အချက်အလက်များကို encoding formats အမျိုးမျိုးတွင်ပိုမိုထိရောက်စွာခွဲခြမ်းစိတ်ဖြာနိုင်သည်။