XML အချက်အလက်များကိုထုတ်လုပ်သည့်အခါ Namespace သည်အလွန်အရေးကြီးသောအယူအဆဖြစ်သည်။ developer များက developer များကပ conflicts ိပက်ခများကိုအမည်ပေးခြင်းကိုရှောင်ရှားရန်ခွင့်ပြုပြီး XML စာရွက်စာတမ်းများကိုပိုမိုရှင်းလင်းစွာဖော်ပြထားသည်။ PHP သည် XML_SET_ENT_ENNERNAMS_Handler function ကို callback_handler function ကိုမှတ်ပုံတင်ရန်အတွက် PHP သည် XML parsing interface ကို (Expat parser အပေါ်အခြေခံသည်) ကိုထောက်ပံ့ပေးသည်။ ဒီဆောင်းပါးကဒီ function ကိုသုံးပြီး xml ခွဲခြမ်းစိတ်ဖြာနေစဉ်အတွင်း Namespace ကိုဘယ်လိုကိုင်တွယ်ဖြေရှင်းနိုင်မလဲဆိုတာကိုအသေးစိတ်ရှင်းပြပါလိမ့်မယ်။
XML_set_Ennamespace_Decl_handler သည် PHP တွင် XML parser နှင့်သက်ဆိုင်သော function တစ်ခုဖြစ်သည်။ ၎င်း၏ရှေ့ပြေးပုံစံသည်အောက်ပါအတိုင်းဖြစ်သည် -
bool xml_set_end_namespace_decl_handler(XMLParser $parser, callable $handler)
အဆိုပါ function ကို namespace ကြေငြာချက်၏အဆုံးမှာသတ်မှတ်ထားသော callback function ကိုခေါ်ရန်ဖြစ်ပါတယ်။ Callback function ကို၏လက်မှတ်သည်အောက်ပါအတိုင်းဖြစ်သည် -
function handler(XMLParser $parser, string $prefix)
အတွက်
$ parser သည်လက်ရှိ XML parser အရင်းအမြစ်ဖြစ်သည်။
$ ရှေ့ဆက်သည် ကြေငြာချက်အဆုံးသတ်သည့် namespace ရှေ့ဆက်ဖြစ်သည်။
ရှုပ်ထွေးသော XML စာရွက်စာတမ်းများတွင်ကွဲပြားခြားနားသော elements ကွဲပြားခြားနားသော namespaces သုံးနိုင်သည်။ ထိုကဲ့သို့သောစာရွက်စာတမ်းများကိုခွဲခြမ်းစိတ်ဖြာသောအခါ, ကြေညာချက်များကိုခြေရာခံရန်အဖိုးတန်သည် - ဥပမာ,
စီးပွားရေးယုတ္တိဗေဒမှ namespaces မှ dynamally မြေပုံ;
ပိုမိုတိကျသော xml စိစစ်အတည်ပြုသို့မဟုတ် filter များကိုပိုမိုအကောင်အထည်ဖော်;
တတိယပါတီ XML ပုံစံများနှင့်လိုက်ဖက်ညီမှုတိုးတက်အောင်လုပ်ပါ။
xml_set_end_ennamnamonface_Decl_Handler ကို ဘယ်လိုသုံးရမလဲဆိုတာပြတဲ့အပြည့်စုံတဲ့ဥပမာတစ်ခုပါ။
<?php
// namespace stack ကိုသတ်မှတ်ပါ
$namespaceStack = [];
// parser ဖန်တီးပါ
$parser = xml_parser_create_ns();
// namespace searchator ထားပါ
xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);
xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1);
// namespace ၏အစနှင့်အဆုံးအတွက်အပြောင်းအလဲနဲ့ function ကိုသတ်မှတ်ပါ
xml_set_start_namespace_decl_handler($parser, function($parser, $prefix, $uri) use (&$namespaceStack) {
echo "namespace ကြေငြာချက်ကိုစတင်ပါ: ရေှ့ဆက်တဲှ={$prefix}, URI={$uri}\n";
array_push($namespaceStack, $prefix);
});
xml_set_end_namespace_decl_handler($parser, function($parser, $prefix) use (&$namespaceStack) {
echo "namespace ကြေငြာချက်အဆုံးသတ်: ရေှ့ဆက်တဲှ={$prefix}\n";
$popped = array_pop($namespaceStack);
if ($popped !== $prefix) {
echo "အသိပေး:namespace stacking အမိန့်ကိုက်ညီမှုဖြစ်ပါတယ်!\n";
}
});
// နမူနာ XML အချက်များ
$xml = <<<XML
<root xmlns:h="http://gitbox.net/html" xmlns:f="http://gitbox.net/form">
<h:table>
<h:tr>
<h:td>အချက်များ1</h:td>
<h:td>အချက်များ2</h:td>
</h:tr>
</h:table>
<f:form>
<f:input>ဝင်ရောက်</f:input>
</f:form>
</root>
XML;
// သုံးသပ်ကြည့်ရှုခြင်း XML
if (!xml_parse($parser, $xml, true)) {
echo "XML သုံးသပ်ကြည့်ရှုခြင်း错误: " . xml_error_string(xml_get_error_code($parser)) . "\n";
}
// အရင်းအမြစ်များကိုအခမဲ့
xml_parser_free($parser);
?>
အထက်ဖော်ပြပါ script ကို executing လုပ်သည့်အခါ Namespace ၏အစနှင့်အဆုံးကိုအစပျိုးခြင်းနှင့်သက်ဆိုင်ရာအချက်အလက်များကို developer များအနေဖြင့် developer များကို developer များနားလည်သဘောပေါက်ရန်ကူညီရန်ပုံနှိပ်ထုတ်ဝေမည်။
ရလဒ်ဥပမာ:
namespace ကြေငြာချက်ကိုစတင်ပါ: ရေှ့ဆက်တဲှ=h, URI=http://gitbox.net/html
namespace ကြေငြာချက်ကိုစတင်ပါ: ရေှ့ဆက်တဲှ=f, URI=http://gitbox.net/form
namespace ကြေငြာချက်အဆုံးသတ်: ရေှ့ဆက်တဲှ=f
namespace ကြေငြာချက်အဆုံးသတ်: ရေှ့ဆက်တဲှ=h
parser mode သည် parser ကိုဖန်တီးသည့်အခါ xml_parser_create_ns () ကိုသုံးပါ။
ထုတ်ယူခြင်းအမိန့်ပြ problem နာ - Namespace ၏အဆုံးအမိန့်သည်ကြေငြာချက်အမိန့်နှင့်ဆန့်ကျင်ဘက်ဖြစ်သင့်သည်။
URI ၏ထူးခြားမှု - စီးပွားရေးပြုပြင်ထုတ်လုပ်မှုအတွင်း URI ကိုအသုံးပြုရန်အတွက်အမှန်တကယ်ပြုပြင်ခြင်းအတွက်အခြေခံအဖြစ်အသုံးပြုရန်အကြံပြုလိုသည်။
XML_SEST_END_ENDOPT_ENDPASTACHACL_Handler မှတဆင့် PHP developer များသည် xml parsing စဉ်အတွင်း Namespace Life Cylecle မှသတင်းအချက်အလက်များကိုရယူနိုင်ပါသည်။ ကြေငြာချက်နှင့်အဆုံးသတ်ကြေငြာချက်စတင်ခြင်း၏ callback processing ယန္တရားကိုပေါင်းစပ်ခြင်း, စာရွက်စာတမ်းဖွဲ့စည်းပုံ၏ Semantics အချက်အလက်များကိုကျွန်ုပ်တို့အားတိကျစွာထိန်းချုပ်နိုင်သည်။