လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> xml_set_end_endnonface_decl_handler မှတဆင့်တစ်ချိန်တည်းမှာ namespaces အဆုံးသတ်ဘယ်မှာမြင်ကွင်းများကိုစီမံခန့်ခွဲနည်း?

xml_set_end_endnonface_decl_handler မှတဆင့်တစ်ချိန်တည်းမှာ namespaces အဆုံးသတ်ဘယ်မှာမြင်ကွင်းများကိုစီမံခန့်ခွဲနည်း?

gitbox 2025-05-19

XML စာရွက်စာတမ်းများကိုခွဲခြမ်းစိတ်ဖြာသည့်အခါ Namespace အသုံးပြုခြင်းသည် element and attribute names များအကြားပ conflict ိပက်ခများကိုထိရောက်စွာရှောင်ရှားနိုင်သည်။ PHP ၏ XML Parser (Expat အပေါ် အခြေခံ. ) XML ဖိုင်များကို names များရှိသည့် XML ဖိုင်များကိုလုပ်ဆောင်ရန် (Expat အပေါ် အခြေခံ. ) ကို အသုံးပြု. NAMSTARESS အစနှင့်အစကိုကျိုးကြောင်းဆီလျော်စွာစီမံရန်အထူးအရေးကြီးသည်။

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

xml_set_end_namonface_decl_handler ဆိုတာဘာလဲ

XML_SESS_END_EnD_STAST_DECL_HANDER သည် NAMSER ကြေငြာချက်၏အဆုံးကိုတွေ့သောအခါ php မှပေးသောပရိုဆက်ဆာ (callback function) ကိုသတ်မှတ်ရန်လုပ်ဆောင်သည်။ ၎င်း၏ရှေ့ပြေးပုံစံသည်အောက်ပါအတိုင်းဖြစ်သည် -

 bool xml_set_end_namespace_decl_handler(XMLParser $parser, callable $handler)

XML_Parser_create () ကဖန်တီးထားသော parser ၏ parser အရင်းအမြစ်တစ်ခုဖြစ်သော parser အရင်းအမြစ် ဖြစ်သည်

ဇာတ်လမ်းဖော်ပြချက် - တစ်ချိန်တည်းမှာ namespace မျိုးစုံအဆုံးသတ်

XML ဖွဲ့စည်းပုံကိုအောက်ပါအတိုင်းမြင်ယောင်ကြည့်ပါ။

 <root xmlns:h="http://gitbox.net/html" xmlns:f="http://gitbox.net/form">
  <h:table>
    <f:input type="text"/>
  </h:table>
</root>

အထက်ပါ XML နှင့် F သည် ကွဲပြားခြားနားသောအမည်များဖြစ်သည်။ သူတို့၏နယ်ပယ်သည် <rolot> tag တစ်လျှောက်လုံးတွင်ပိုမိုရှုပ်ထွေးသောစာရွက်စာတမ်းများတွင်အသိုက်အဖုံးအုပ်စိုးသောနေရာများပေါ်လာလိမ့်မည်။

အရင်းအမြစ်များကိုမှတ်တမ်းတင်ခြင်း, စစ်ဆေးခြင်း, ဖြန့်ချိခြင်း,

နမူနာကုဒ်: parse နှင့် process မျိုးစုံ namespace စွန်းစွန်း

xml_set_end_ennamespace_Decl_handler ကိုအသုံးပြုပြီး namespace ရဲ့အဆုံးကိုဘယ်လိုကိုင်တွယ်ရမယ်ဆိုတာပြတဲ့အပြည့်စုံတဲ့ဥပမာတစ်ခုပါ။

 <?php

$xml = <<<XML
<root xmlns:h="http://gitbox.net/html" xmlns:f="http://gitbox.net/form">
  <h:table>
    <f:input type="text"/>
  </h:table>
</root>
XML;

// ဖန်တီး XML မိစ်ဆာ
$parser = xml_parser_create_ns();

// namespace end processor ကိုသတ်မှတ်ပါ
xml_set_end_namespace_decl_handler($parser, function($parser, $prefix) {
    echo "namespace ၏အဆုံး: ရေှ့ဆက်တဲှ = $prefix\n";
});

// default element processor ကိုသတ်မှတ်ပါ
xml_set_element_handler($parser,
    function($parser, $name, $attrs) {
        echo "Element ကိုစတင်ပါ: $name\n";
    },
    function($parser, $name) {
        echo "Ender: $name\n";
    }
);

// သုံးသပ်ကြည့်ရှုခြင်း XML အချက်များ
if (!xml_parse($parser, $xml, true)) {
    die(sprintf(
        "XML အမှား: %s အတွက် %d အိုကေ",
        xml_error_string(xml_get_error_code($parser)),
        xml_get_current_line_number($parser)
    ));
}

// 释放မိစ်ဆာ资源
xml_parser_free($parser);
?>

စစ်ဆင်ရေးရလဒ်များကိုခွဲခြမ်းစိတ်ဖြာခြင်း

အထက်ပါကုဒ်ကိုသင်ဖွင့်သောအခါအောက်ပါနှင့်ဆင်တူသည့် output ကိုသင်တွေ့လိမ့်မည်။

 Element ကိုစတင်ပါ: root
Element ကိုစတင်ပါ: h:table
Element ကိုစတင်ပါ: f:input
Ender: f:input
Ender: h:table
Ender: root
namespace ၏အဆုံး: ရေှ့ဆက်တဲှ = h
namespace ၏အဆုံး: ရေှ့ဆက်တဲှ = f

သင်မြင်နိုင်ပါသည်, စာရွက်စာတမ်း၏အစတွင်အမည်များကြေ ငြာ သော်လည်း <root> element ကိုပိတ်ထားသည့်အခါသူတို့၏နယ်ပယ်သည်အမှန်တကယ်အဆုံးသတ်သွားသည်။

မှတ်သားရန်အရာ

  • parser တစ်ခုဖန်တီးရန် XML_Parser_create_ns () ကို အသုံးပြုပါက Namespace Processor သည်အကျိုးသက်ရောက်နိုင်သည်။

  • xml_set_Ennamespace_Decl_handler ၏ callback function သည် parameter နှစ်ခုကိုသာရရှိသည်။ Parser အရင်းအမြစ်နှင့် Namespace ရှေ့ဆက်ရှေ့ဆက်။

  • တစ်ချိန်တည်းမှာနာမည်နိမ့်ကျသွားသည့်အခါ, namespace တစ်ခုစီအတွက် callback ကိုတစ်ကြိမ်သာခေါ်ဆိုလိမ့်မည်။

ကောက်ချက်

XML_set_Ennonface_Decl_Handler function ကို PHP developer များသည်အထူးသဖြင့်ရှုပ်ထွေးသော XML စာရွက်စာတမ်းများနှင့်ဆက်ဆံရာတွင် Namespace Life Cycle ကိုတိကျစွာထိန်းချုပ်နိုင်သည်။ 0 န်ဆောင်မှုများနှင့် configuration file parsing ကဲ့သို့သောအခြေအနေများတွင်မှန်ကန်သောဒေတာလုပ်ဆောင်နိုင်စွမ်းကိုသေချာစေရန်အတွက်ပရိုဆက်ဆာကိုပေါင်းစပ်ထားသောပရိုဆက်ဆာကိုပေါင်းစပ်ခြင်း။