လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> ရှုပ်ထွေးသော namespace ပြောင်းလဲခြင်းလုပ်ဆောင်ရန် XML_SESSE_END_ENDOMPARD_DECL_Handler ကိုသုံးပါ

ရှုပ်ထွေးသော namespace ပြောင်းလဲခြင်းလုပ်ဆောင်ရန် XML_SESSE_END_ENDOMPARD_DECL_Handler ကိုသုံးပါ

gitbox 2025-05-26

XML ဒေတာများကိုလုပ်ဆောင်သည့်အခါ Namespace သည်အထူးသဖြင့် Cross-System Data Interactions တွင်ထူးခြားမှုကိုသေချာစေရန် Namespace သည်အဓိကနည်းလမ်းဖြစ်သည်။ PHP သည် Sax-based parser ကို Sax-based parser ကိုခွဲခြမ်းစိတ်ဖြာရန်အမျိုးမျိုးသောနည်းလမ်းများကိုထောက်ပံ့ပေးသည်။

ဤဆောင်းပါးသည် PHP ၏ XML_SET_END_END_DECNSTERS_Handler ကိုအာရုံစိုက်ပြီးရှုပ်ထွေးသော Namespace ပြောင်းလဲခြင်းလုပ်ငန်းများကိုအကောင်အထည်ဖော်ရန်မည်သို့အသုံးပြုရမည်ကိုပြသရန်

XML_SESSESS_END_Ennamespace_Decl_Handler ကဘာလဲ။

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 ဖြစ်သည်။

namespace ပြောင်းလဲခြင်းလိုအပ်ချက်များကိုခွဲခြမ်းစိတ်ဖြာခြင်း

တစ်ခါတစ်ရံတွင်ကျွန်ုပ်တို့သည် XML ရှိ Namespace များပေါ်တွင်ရှုပ်ထွေးသောပြောင်းလဲခြင်းလုပ်ငန်းများကိုလုပ်ဆောင်ရန်လိုအပ်သည်။

  • အချို့သော namespace ရှေ့ဆက်များကိုစိတ်ကြိုက်ရှေ့ဆက်များသို့ပြောင်းပါ။

  • သတ်သတ်မှတ်မှတ် namespace ကို filter လုပ်ပါ။

  • ခွဲခြမ်းစိတ်ဖြာမှုကာလအတွင်း namespace မြေပုံနှင့်ညှိနှိုင်းမှုကိုပြောင်းလဲခြင်း။

ဤစစ်ဆင်ရေးများသည် xml element များနှင့် attribute တွေ၏ဂုဏ်သိက္ခာပြောင်းလဲခြင်းကိုသေချာစေရန် namespace ၏အစနှင့်အဆုံးတွင်သက်ဆိုင်ရာအပြောင်းအလဲနှင့်သက်ဆိုင်သည်။

အကောင်အထည်ဖော်မှုစိတ်ကူးများ

  1. Namespace Start Event ကိုဖမ်းယူရန် XML_SEST_START_START_START_START_STATCHAME_DECL_Handler ကိုသုံးပါ။

  2. Namespace End Event ကိုဖမ်းယူရန် xml_set_end_ennamespace_Decl_handler ကို သုံးပါ။

  3. 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);
?>

အပြေး Effect ခွဲခြမ်းစိတ်ဖြာ

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 ၏အဆင့်မြင့်သုံးစွဲမှုကိုပိုမိုနားလည်သဘောပေါက်ရန်ဤဆောင်းပါးသည်သင့်အားပိုမိုကောင်းမွန်သောနားလည်မှုကိုပိုမိုနားလည်ရန်ကူညီလိမ့်မည်ဟုမျှော်လင့်ပါ။