XML_EsST_ELEMEMEMEN_HANDLER သည် XML စာရွက်စာတမ်းများကိုခွဲခြမ်းစိတ်ဖြာသောအခါ PHP မှစတင်ခြင်းနှင့်အဆုံးဒြပ်စင်များ၏လုပ်ဆောင်မှုကိုလုပ်ဆောင်ရန်လုပ်ဆောင်ရန်လုပ်ဆောင်ချက်တစ်ခုဖြစ်သည်။ အထူးသဖြင့်၎င်းသည် Element Start (ဥပမာ <element> ) နှင့် element end (ဥပမာအားဖြင့် </ element>) နှင့် element end (ဥပမာ </ element >) ကိုတွေ့သောအခါသတ်မှတ်ထားသော callback function ကိုခေါ်ယူလိမ့်မည်။ ဤလုပ်ဆောင်ချက်ကိုအသုံးပြုသောအခါ XML စာရွက်စာတမ်းကိုအောင်မြင်စွာခွဲခြမ်းစိတ်ဖြာပြီးနောက်သက်ဆိုင်ရာအရင်းအမြစ်များကိုသန့်ရှင်းရေးလုပ်နိုင်အောင်လျှို့ဝှက်ထားသည့်အရင်းအမြစ်များကိုသန့်ရှင်းရေးပြုလုပ်နိုင်ရန်သေချာစေရန်လိုအပ်ကြောင်းသေချာစေရန်လိုအပ်သည်။
<span><span><span class="hljs-variable">$parser</span></span><span> = </span><span><span class="hljs-title function_ invoke__">xml_parser_create</span></span><span>();
</span><span><span class="hljs-title function_ invoke__">xml_set_element_handler</span></span><span>(</span><span><span class="hljs-variable">$parser</span></span><span>, </span><span><span class="hljs-string">"startElement"</span></span><span>, </span><span><span class="hljs-string">"endElement"</span></span><span>);
</span></span>
အထက်ဖော်ပြပါကုဒ်များတွင် startelement နှင့် endelement များသည် XML element ၏အစနှင့်အဆုံးတွင်ကျွန်ုပ်တို့၏စိတ်ကြိုက်ပြန်ပြောချက်လုပ်ဆောင်ချက်များဖြစ်သည်။
အရင်းအမြစ်များကိုအသုံးမပြုတော့သည့်အရင်းအမြစ်များကိုအတိအလင်းမဖြန့်ချိသည့်အခါမှတ်ဉာဏ်ယိုစိမ့်မှုသည်များသောအားဖြင့်ပေါ်ပေါက်သည်။ XML parser သည် Callback function ကို အခြေခံ. ဒြပ်စင်တစ်ခုစီကိုပြုလုပ်သည်။ ဤ callback function များသည်အရာဝတ်ထုများကိုအဆက်မပြတ်အရာဝတ်ထုများကိုဖန်တီးပါက၎င်းအားမှတ်ဥာဏ်များကိုမှန်ကန်စွာမထုတ်ယူပါနှင့်။
အထူးသဖြင့်မှတ်ဉာဏ်ယိုစိမ့်မှုများကိုအောက်ပါရှုထောင့်များတွင်တွေ့နိုင်သည်။
Memory မှလွတ်လွတ်လပ်လပ်ပြန်မပေးပါ - callback function တွင်မှတ်ဉာဏ်ကိုထည့်သွင်းထားလျှင် (ဥပမာအားဖြင့်အရာဝတ်ထုများသို့မဟုတ် array အမြောက်အများကိုဖန်တီးထားသည်) နှင့်ဤအချက်အလက်များကိုမှန်ကန်စွာမသန့်ရှင်းပါ။
Parser အရင်းအမြစ်များကိုမထုတ်ပါနှင့် - xml_parser_Free () parser အရင်းအမြစ်များကိုထုတ်လွှတ်ရန် Parser ကိုအသုံးပြုပြီးနောက်မခေါ်ပါ။
မှတ်ဥာဏ်ယိုစိမ့်မှုများကိုရှောင်ရှားရန်အောက်ပါနည်းလမ်းများကိုကျွန်ုပ်တို့ယူနိုင်သည်။
ခွဲခြမ်းစိတ်ဖြာပြီးနောက် XML_Parser_Free () ကို parser အရင်းအမြစ်များကိုအခမဲ့ခေါ်ဆိုသင့်သည်။ ဤသည်မှတ်ဥာဏ်ယိုစိမ့်မှုများကိုရှောင်ရှားရန်ပထမခြေလှမ်းဖြစ်သည်။
<span><span><span class="hljs-variable">$parser</span></span><span> = </span><span><span class="hljs-title function_ invoke__">xml_parser_create</span></span><span>();
</span><span><span class="hljs-title function_ invoke__">xml_set_element_handler</span></span><span>(</span><span><span class="hljs-variable">$parser</span></span><span>, </span><span><span class="hljs-string">"startElement"</span></span><span>, </span><span><span class="hljs-string">"endElement"</span></span><span>);
</span><span><span class="hljs-variable">$xmlData</span></span><span> = </span><span><span class="hljs-string">'<root><item>1</item><item>2</item></root>'</span></span><span>;
</span><span><span class="hljs-title function_ invoke__">xml_parse</span></span><span>(</span><span><span class="hljs-variable">$parser</span></span><span>, </span><span><span class="hljs-variable">$xmlData</span></span><span>, </span><span><span class="hljs-literal">true</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">xml_parser_free</span></span><span>(</span><span><span class="hljs-variable">$parser</span></span><span>); </span><span><span class="hljs-comment">// parser အရင်းအမြစ်များကိုလွှတ်ပေးပါ</span></span><span>
</span></span>
ဤဥပမာတွင်ခွဲခြမ်းစိတ်ဖြာခြင်းပြီးဆုံးပြီးနောက် XML_Parser_Free ($ parser) မှတဆင့် parser အရင်းအမြစ်များကိုဖြန့်ချိခဲ့သည်။
Callback လုပ်ဆောင်ချက်များတွင်မလိုအပ်သောမှတ်ဉာဏ်ခွဲဝေချထားပေးခြင်းကိုကျွန်ုပ်တို့ရှောင်သင့်သည်။ ဥပမာအားဖြင့်ကျွန်ုပ်တို့သည် XML element များနှင့်အလုပ်လုပ်သောအခါအရာဝတ်ထုများသို့မဟုတ်ကြီးမားသောခင်းကျင်းမှုများကိုမကြာခဏဖန်တီးပါက,
<span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">startElement</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$parser</span></span></span><span>, </span><span><span class="hljs-variable">$name</span></span><span>, </span><span><span class="hljs-variable">$attrs</span></span><span>) {
</span><span><span class="hljs-comment">// မှတ်ဉာဏ်ခွဲဝေချထားပေးရန်လျှော့ချပါ</span></span><span>
</span><span><span class="hljs-built_in">static</span></span><span> </span><span><span class="hljs-variable">$cachedData</span></span><span> = [];
</span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-keyword">isset</span></span><span>(</span><span><span class="hljs-variable">$cachedData</span></span><span>[</span><span><span class="hljs-variable">$name</span></span><span>])) {
</span><span><span class="hljs-variable">$cachedData</span></span><span>[</span><span><span class="hljs-variable">$name</span></span><span>] = []; </span><span><span class="hljs-comment">// cache ကိုဒေတာ</span></span><span>
}
</span><span><span class="hljs-comment">// E ဒြပ်စင်များ</span></span><span>
}
</span></span>
Static cache array များကိုအသုံးပြုခြင်းအားဖြင့်ကျွန်ုပ်တို့သည်မကြာခဏမှတ်ဉာဏ်ခွဲဝေချထားပေးခြင်းကိုလျှော့ချနိုင်ပြီးမှတ်ဥာဏ်အလွန်အကျွံသုံးစွဲမှုကိုရှောင်ရှားနိုင်သည်။
XML_Parse () function သည်ခွဲခြမ်းစိတ်ဖြာမှုအောင်မြင်မှုရှိမရှိညွှန်ပြသည့် boolean value ကိုပြန်ပို့သည်။ ခွဲခြမ်းစိတ်ဖြာမှုမအောင်မြင်ပါက parser အရင်းအမြစ်ကိုချက်ချင်းပြန်လွှတ်ပေးသင့်သည်။
<span><span><span class="hljs-variable">$parser</span></span><span> = </span><span><span class="hljs-title function_ invoke__">xml_parser_create</span></span><span>();
</span><span><span class="hljs-title function_ invoke__">xml_set_element_handler</span></span><span>(</span><span><span class="hljs-variable">$parser</span></span><span>, </span><span><span class="hljs-string">"startElement"</span></span><span>, </span><span><span class="hljs-string">"endElement"</span></span><span>);
</span><span><span class="hljs-variable">$xmlData</span></span><span> = </span><span><span class="hljs-string">'<root><item>1</item></root>'</span></span><span>;
</span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-title function_ invoke__">xml_parse</span></span><span>(</span><span><span class="hljs-variable">$parser</span></span><span>, </span><span><span class="hljs-variable">$xmlData</span></span><span>, </span><span><span class="hljs-literal">true</span></span><span>)) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"XML Parsing Error: "</span></span><span> . </span><span><span class="hljs-title function_ invoke__">xml_error_string</span></span><span>(</span><span><span class="hljs-title function_ invoke__">xml_get_error_code</span></span><span>(</span><span><span class="hljs-variable">$parser</span></span><span>));
}
</span><span><span class="hljs-title function_ invoke__">xml_parser_free</span></span><span>(</span><span><span class="hljs-variable">$parser</span></span><span>);
</span></span>
XML_Parse ၏ပြန်လာတန်ဖိုးကိုစစ်ဆေးခြင်းအားဖြင့်ကျွန်ုပ်တို့သည်အမှားအယွင်းများကိုအမှားအယွင်းများကြောင့်ဖြစ်ပေါ်လာသောအမှားများကြောင့်ဖြစ်ပေါ်လာသောအမှားများကိုအချိန်မီကိုင်တွယ်နိုင်သည်။
ကြီးမားသော XML ဖိုင်များနှင့်အလုပ်လုပ်သောအခါဖိုင်တစ်ခုလုံးကိုမှတ်ဉာဏ်တွင်အချိန်ကြာမြင့်စွာမထားပါနှင့်။ ဖြစ်နိုင်လျှင် XML အချက်အလက်များကိုအသုတ်တွင် XML ဒေတာများကိုထုတ်လုပ်ရန် streaming method များကို သုံး. ဒေတာတစ်ခုချင်းစီကိုအစုအဝေးတစ်ခုချင်းစီကိုပြုပြင်ပြီးနောက်သက်ဆိုင်ရာမှတ်ဉာဏ်အရင်းအမြစ်များကိုချက်ချင်းဖြန့်ချိပါ။
<span><span><span class="hljs-variable">$parser</span></span><span> = </span><span><span class="hljs-title function_ invoke__">xml_parser_create</span></span><span>();
</span><span><span class="hljs-title function_ invoke__">xml_set_element_handler</span></span><span>(</span><span><span class="hljs-variable">$parser</span></span><span>, </span><span><span class="hljs-string">"startElement"</span></span><span>, </span><span><span class="hljs-string">"endElement"</span></span><span>);
</span><span><span class="hljs-variable">$xmlData</span></span><span> = </span><span><span class="hljs-string">'<root><item>1</item><item>2</item></root>'</span></span><span>;
</span><span><span class="hljs-keyword">while</span></span><span> (</span><span><span class="hljs-variable">$chunk</span></span><span> = </span><span><span class="hljs-title function_ invoke__">getNextChunkFromFile</span></span><span>()) { </span><span><span class="hljs-comment">// အတုံးများတွင်ဒေတာကိုဖတ်ပါ</span></span><span>
</span><span><span class="hljs-title function_ invoke__">xml_parse</span></span><span>(</span><span><span class="hljs-variable">$parser</span></span><span>, </span><span><span class="hljs-variable">$chunk</span></span><span>, </span><span><span class="hljs-literal">false</span></span><span>);
}
</span><span><span class="hljs-title function_ invoke__">xml_parser_free</span></span><span>(</span><span><span class="hljs-variable">$parser</span></span><span>);
</span></span>
အကယ်. ကျွန်ုပ်တို့သည် calmback function တွင် element များ၏ပါဝင်မှုကိုလုပ်ဆောင်ပါက PHP ၏အမှိုက်သရိုက်စုဆောင်းမှုယန္တရားကိုအခမဲ့မှတ်ဥာဏ်ကိုကောင်းကောင်းမွန်မွန်မွန်မွန်မွန်မွန်မွန်မွန်မွန်မွန်မွန်မွန်မွန်မွန်မွန်မွန်မွန်မွန်မွန်မွန်မွန်မွန်မွန်မွန်မွန်မွန်မွန်မွန်မွန်မွန်မွန်မွန်မွန်မွန်မွန်မွန်မွန်မွန်မွန်မွန်မွန်မွန်မွန်မွန်မွန်မွန်မွန်မွန်မွန်မွန်မွန်မွန်မွန်မွန်မွန်မွန်မွန်မွန်မွန်မွန်မွန်မွန်မွန်မွန်မွန်မွန်မွန်မွန်မွန်မွန်မွန်မွန်မွန်မွန်မွန်မွန်မွန်မွန်မွန်မွန်မွန်မွန်မွန်မွန်မွန်မွန်မွန်မွန်မွန်မွန်မွန်မွန်မွန်မှတ်ဉာဏ်ကိုကူညီနိုင်ရန်အတွက် NULL မှမရှိတော့သည့် variable များကိုဖြေရှင်းနိုင်ရန်သေချာစေသင့်သည်။
<span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">startElement</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$parser</span></span></span><span>, </span><span><span class="hljs-variable">$name</span></span><span>, </span><span><span class="hljs-variable">$attrs</span></span><span>) {
</span><span><span class="hljs-comment">// မရှိတော့အသုံးပြုသော variable တွေကိုသတ်မှတ်ထားသည်null</span></span><span>
</span><span><span class="hljs-built_in">static</span></span><span> </span><span><span class="hljs-variable">$previousElement</span></span><span> = </span><span><span class="hljs-literal">null</span></span><span>;
</span><span><span class="hljs-variable">$previousElement</span></span><span> = </span><span><span class="hljs-literal">null</span></span><span>; </span><span><span class="hljs-comment">// မလိုအပ်သော variable တွေကိုရှင်းလင်းပါ</span></span><span>
}
</span></span>
PHP တွင် XML_SEST_ELEMEMETER_HANDLER ကို အသုံးပြုသောအခါ၎င်းသည် parser အရင်းအမြစ်များနှင့်မှတ်ဉာဏ်ကိုစနစ်တကျစီမံခန့်ခွဲရန်အလွန်အရေးကြီးသည်။ Parser အရင်းအမြစ်များကိုအချိန်မီဖြန့်ချိခြင်းအားဖြင့်မလိုအပ်သောမှတ်ဉာဏ်လုပ်ဆောင်မှုများတွင်မလိုအပ်သောမှတ်ဉာဏ်ခွဲဝေချထားမှုကိုရှောင်ရှားခြင်းနှင့်ကျိုးကြောင်းဆီလျော်သောအမှားကိုင်တွယ်မှုကိုရှောင်ရှားခြင်းအားဖြင့်ကျွန်ုပ်တို့သည်မှတ်ဉာဏ်ယိုစိမ့်မှုများကိုထိရောက်စွာတားဆီးနိုင်သည်။ ထို့အပြင် cache နှင့် static variable များကိုဆင်ခြင်တုံတရားအသုံးပြုခြင်းနှင့် 0 ယ်လိုအားနှင့်ပတ်သက်သည့်အချက်အလက်များကိုအပြန်အလှန်အသုံးပြုခြင်းသည်မှတ်ဥာဏ်စီမံခန့်ခွဲမှုအပေါ်ပိုမိုကောင်းမွန်အောင်ပြုလုပ်ရန်နည်းလမ်းကောင်းတစ်ခုဖြစ်သည်။
ကျွန်ုပ်တို့သည်ခွဲခြမ်းစိတ်ဖြာခြင်းလုပ်ငန်းစဉ်အတွင်းသတိထားနေသရွေ့, လိုအပ်သည့်အရင်းအမြစ်များကိုမှန်ကန်စွာဖြန့်ချိနိုင်အောင်သေချာစေရန်အတွက်,