XML ဒေတာများကိုလုပ်ဆောင်သည့်အခါ Namespace သည်အထူးသဖြင့် Cross-System Data Interactions တွင်ထူးခြားမှုကိုသေချာစေရန် Namespace သည်အဓိကနည်းလမ်းဖြစ်သည်။ PHP သည် Sax-based parser ကို Sax-based parser ကိုခွဲခြမ်းစိတ်ဖြာရန်အမျိုးမျိုးသောနည်းလမ်းများကိုထောက်ပံ့ပေးသည်။
ဤဆောင်းပါးသည် PHP ၏ XML_SET_END_END_DECNSTERS_Handler ကိုအာရုံစိုက်ပြီးရှုပ်ထွေးသော Namespace ပြောင်းလဲခြင်းလုပ်ငန်းများကိုအကောင်အထည်ဖော်ရန်မည်သို့အသုံးပြုရမည်ကိုပြသရန်
XML_SESS_END_Ennamespace_Decl_Handler သည် PHP XML parser တွင် callback မှတ်ပုံတင်ခြင်းလုပ်ဆောင်ချက်ဖြစ်သည်။ XML ရှိ Namespace ကြေငြာချက်၏အဆုံးကိုခွဲခြမ်းစိတ်ဖြာသည့်အခါဖြစ်သည့် callback function ကိုသတ်မှတ်ရန်ခွင့်ပြုသည်။
Syntax သည်အောက်ပါအတိုင်းဖြစ်သည် -
bool xml_set_end_namespace_decl_handler ( resource $parser , callable $handler )
$ Parser : XML parser အရင်းအမြစ်။
$ handler : Handler တွင် formall တွင် format လုပ်ထားသည့် callback function ကို ($ parser, tefix) , $ prefix သည်အဆုံးသတ် namespace prefix ဖြစ်သည်။
တစ်ခါတစ်ရံတွင်ကျွန်ုပ်တို့သည် XML ရှိ Namespace များပေါ်တွင်ရှုပ်ထွေးသောပြောင်းလဲခြင်းလုပ်ငန်းများကိုလုပ်ဆောင်ရန်လိုအပ်သည်။
အချို့သော namespace ရှေ့ဆက်များကိုစိတ်ကြိုက်ရှေ့ဆက်များသို့ပြောင်းပါ။
သတ်သတ်မှတ်မှတ် namespace ကို filter လုပ်ပါ။
ခွဲခြမ်းစိတ်ဖြာမှုကာလအတွင်း namespace မြေပုံနှင့်ညှိနှိုင်းမှုကိုပြောင်းလဲခြင်း။
ဤစစ်ဆင်ရေးများသည် xml element များနှင့် attribute တွေ၏ဂုဏ်သိက္ခာပြောင်းလဲခြင်းကိုသေချာစေရန် namespace ၏အစနှင့်အဆုံးတွင်သက်ဆိုင်ရာအပြောင်းအလဲနှင့်သက်ဆိုင်သည်။
Namespace Start Event ကိုဖမ်းယူရန် XML_SEST_START_START_START_START_STATCHAME_DECL_Handler ကိုသုံးပါ။
Namespace End Event ကိုဖမ်းယူရန် xml_set_end_ennamespace_Decl_handler ကို သုံးပါ။
Element ၏လုပ်ဆောင်မှု၏လုပ်ဆောင်မှုများကိုပေါင်းစပ်ပြီးအစနှင့်အဆုံးသတ်ပါက,
အောက်ဖော်ပြပါကုဒ်သည် PHP Parser ဖြင့်ရိုးရှင်းသော Namespace ပြောင်းလဲခြင်းကိုမည်သို့အကောင်အထည်ဖော်ရမည်ကိုပြသသည်။
<?php
// parser အရင်းအမြစ်တစ်ခုဖန်တီးပါ,namespace အပြောင်းအလဲနဲ့ enable
$parser = xml_parser_create_ns(null, ':');
// namespace မြေပုံစားပွဲပေါ်မှာ
$nsMap = [];
// အဆိုပါ namespace sart processor ကို setting
xml_set_start_namespace_decl_handler($parser, function($parser, $prefix, $uri) use (&$nsMap) {
// အဖြစ်အားလုံး namespace ရှေ့ဆက်၏စည်းလုံးအစားထိုးအစားထိုး gitbox
$newPrefix = 'gitbox';
$nsMap[$prefix] = $newPrefix;
echo "Namespace started: $prefix => $newPrefix (URI: $uri)\n";
});
// namespace end processor ကိုသတ်မှတ်ပါ
xml_set_end_namespace_decl_handler($parser, function($parser, $prefix) use (&$nsMap) {
echo "Namespace ended: $prefix\n";
unset($nsMap[$prefix]);
});
// element processing စတင်သည်
xml_set_element_handler($parser,
function($parser, $name, $attrs) use (&$nsMap) {
// element name ရှေ့ဆက်ကိုအစားထိုးပါ
if (strpos($name, ':') !== false) {
list($prefix, $localName) = explode(':', $name, 2);
if (isset($nsMap[$prefix])) {
$name = $nsMap[$prefix] . ':' . $localName;
}
}
echo "<$name";
// attribute ရှေ့ဆက်အစားထိုး
foreach ($attrs as $key => $val) {
if (strpos($key, ':') !== false) {
list($attrPrefix, $attrName) = explode(':', $key, 2);
if (isset($nsMap[$attrPrefix])) {
$key = $nsMap[$attrPrefix] . ':' . $attrName;
}
}
echo " $key=\"" . htmlspecialchars($val) . "\"";
}
echo ">";
},
// element end အပြောင်းအလဲနဲ့
function($parser, $name) use (&$nsMap) {
if (strpos($name, ':') !== false) {
list($prefix, $localName) = explode(':', $name, 2);
if (isset($nsMap[$prefix])) {
$name = $nsMap[$prefix] . ':' . $localName;
}
}
echo "</$name>";
}
);
// ဖတ် XML ကေြနပ်သော
$xml = <<<XML
<root xmlns:oldns="http://gitbox.net/oldnamespace">
<oldns:item oldns:attr="value">Content</oldns:item>
</root>
XML;
// သုံးသပ်ကြည့်ရှုခြင်း XML
if (!xml_parse($parser, $xml, true)) {
die(sprintf("XML error: %s at line %d",
xml_error_string(xml_get_error_code($parser)),
xml_get_current_line_number($parser)));
}
xml_parser_free($parser);
?>
Input XML သည်အောက်ပါအတိုင်းဖြစ်သည်ဟုယူဆပါ -
<root xmlns:oldns="http://gitbox.net/oldnamespace">
<oldns:item oldns:attr="value">Content</oldns:item>
</root>
ခွဲခြမ်းစိတ်ဖြာပြီးနောက် output:
<root>
<gitbox:item gitbox:attr="value">Content</gitbox:item>
</root>
မူလ namespace ရှေ့ဆက် များအားလုံးကို Gitpox ဖြင့်အစားထိုးထားကြောင်းကိုတွေ့မြင်နိုင်သည်။
Xml_set_Ennamespace_Decl_Handler ကို သက်ဆိုင်ရာ Start Namespace Processor ကို အသုံးပြု. ရှုပ်ထွေးသောစီးပွားရေးလုပ်ငန်းလိုအပ်ချက်များကိုဖြည့်ဆည်းရန်ပြောင်းလွယ်ပြင်လွယ်ပြောင်းလဲခြင်းနှင့်စီမံခန့်ခွဲမှုရရှိနိုင်ပါသည်။ ဤနည်းလမ်းသည်မှတ်ဥာဏ်အသုံးပြုမှုကိုအထိခိုက်မခံသောအခြေအနေများနှင့်ခွဲခြမ်းစိတ်ဖြာခြင်းအတွက်လိုအပ်ချက်များရှိသည်။
PHP SAX Parser ရှိ Namespace ၏အဆင့်မြင့်သုံးစွဲမှုကိုပိုမိုနားလည်သဘောပေါက်ရန်ဤဆောင်းပါးသည်သင့်အားပိုမိုကောင်းမွန်သောနားလည်မှုကိုပိုမိုနားလည်ရန်ကူညီလိမ့်မည်ဟုမျှော်လင့်ပါ။