XML အချက်အလက်များနှင့်အတူအလုပ်လုပ်သည့်အခါအလှည့်အပြောင်းနှင့်ရှုပ်ထွေးသော namespace အဆောက်အအုံများကိုကြုံတွေ့ရသည်မှာအလွန်တွေ့ရလေ့ရှိသည်။ PHP သည် xml_parser_create_ns များကို XML_Parser_create_ns များကိုအထူးဒီဇိုင်းပြုလုပ်ထားသည်။ ရှုပ်ထွေးသော XML ဖွဲ့စည်းတည်ဆောက်ပုံများနှင့်ကိုင်တွယ်ရန် XML_Parser_Create_ns ကို မည်သို့အသုံးပြုရမည်ကိုအသေးစိတ်ရှင်းပြပါလိမ့်မည်။
XML_Parser_create_ns သည် php function ဖြစ်သည်။ သာမန် XML_Parser_Create နှင့်နှိုင်းယှဉ်လျှင်၎င်းသည် tags များကို XML ရှိ namespromes များရှိ namespace များနှင့်ခွဲခြားသတ်မှတ်နိုင်သည်။
Syntax သည်အောက်ပါအတိုင်းဖြစ်သည် -
$parser = xml_parser_create_ns(string $encoding = "UTF-8", string $separator = ":");
$ encoding : UTF-8 မှ default encoding, parsed ဇာတ်ကောင် encoding ကိုဖေါ်ပြသည်။
$ Separator - Namespace နှင့်တံဆိပ်ခွဲရန်အသုံးပြုသောဇာတ်ကောင်သည် namespace တစ်ခုနှင့်တံဆိပ်ကပ်ခြင်း, ပုံမှန်အားဖြင့်သတ်မှတ်ထားသည် ။
namespace-enabled parser ကိုဖန်တီးပါ Parser ကိုဖန်တီးရန် XML_Parser_Create_ns ကို အသုံးပြု. သင့်လျော်သောခွဲနေသူကိုသတ်မှတ်ပါ။
ထုတ်ယူခြင်းလုပ်ဆောင်ချက်ကိုမှတ်ပုံတင်ပါ Start tag နှင့် tag အကြောင်းအရာများကိုကိုင်တွယ်သော callback function ကို xml_set_element_handler နှင့် xml_set_character_data_Handler မှတစ်ဆင့်မှတ်ပုံတင်ထားသည့် callback function ကိုမှတ်ပုံတင်ထားသည်။
Stack ဖွဲ့စည်းပုံခြေရာခံခြင်းအသိုက်အဆင့်ဆင့်ကိုထိန်းသိမ်းပါ XML ကိုအလွှာမျိုးစုံကိုအသိုက်နိုင်သည့်အတွက်လက်ရှိအဆင့်နှင့် tag လမ်းကြောင်းကိုခြေရာခံရန် stack လိုအပ်သည်။
namespace ရှေ့ဆက်နှင့် tag အမည်များကိုဖြေရှင်းပါ parser သည်တံဆိပ်များကိုအလိုအလျောက်ခွဲခြားထားရန်လွယ်ကူသောကွဲပြားမှုအတွက် $ Separator နှင့်အတူ namespaces နှင့်အတူအလိုအလျှောက်ခွဲခြားလိမ့်မည်။
အပြောင်းအလဲနဲ့ဒေတာ <br> <br> ဒေတာများကို callback function တွင်လုပ်ဆောင်သည်, သိမ်းဆည်းထားသောဖွဲ့စည်းပုံနှင့် tag name နှင့်ပေါင်းစပ်ထားသောတည်ဆောက်ပုံသို့ကူးပြောင်းခြင်းသို့မဟုတ်ပြောင်းလဲခြင်း။
အထပ်ပေါင်းစုံအသိုက်နှင့် namespace နှင့်အတူအောက်ပါ XML ရှိသည်ဆိုပါစို့:
<ns1:root xmlns:ns1="http://example.com/ns1" xmlns:ns2="http://example.com/ns2">
<ns1:parent>
<ns2:child>Content A</ns2:child>
<ns2:child>
<ns1:grandchild>Content B</ns1:grandchild>
</ns2:child>
</ns1:parent>
</ns1:root>
PHP parsing ဥပမာ:
<?php
$xml = <<<XML
<ns1:root xmlns:ns1="http://example.com/ns1" xmlns:ns2="http://example.com/ns2">
<ns1:parent>
<ns2:child>Content A</ns2:child>
<ns2:child>
<ns1:grandchild>Content B</ns1:grandchild>
</ns2:child>
</ns1:parent>
</ns1:root>
XML;
$parser = xml_parser_create_ns("UTF-8", ":");
xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, false);
$stack = [];
$current_data = '';
function startElement($parser, $name, $attrs) {
global $stack, $current_data;
// အသစ်သောဒြပ်စင်ကြုံတွေ့သောအခါ,ပထမ ဦး ဆုံးယခင်ဒေတာကိုရှင်းလင်းပါ
$current_data = '';
// Element အမည်များနှင့် stack သို့ attribute တွေတွန်းအားပေး,လွယ်ကူသောပြုပြင်ထိန်းသိမ်းမှုအဆင့်
$stack[] = ['name' => $name, 'attrs' => $attrs];
}
function endElement($parser, $name) {
global $stack, $current_data;
// အဆိုပါ stack ထွက်,လက်ရှိ element ကိုသတင်းအချက်အလက်ရယူပါ
$element = array_pop($stack);
// လက်ရှိ element ၏ namespace နှင့်အမည် output ကို,နှင့်အကြောင်းအရာ
echo "Tag: {$element['name']}, Content: " . trim($current_data) . "\n";
// ရှင်းရှင်းလင်းလင်းလက်ရှိဒေတာ,လုပ်ငန်းစဉ်အတွက်လာမည့် element ကိုပြင်ဆင်ပါ
$current_data = '';
}
function characterData($parser, $data) {
global $current_data;
$current_data .= $data;
}
xml_set_element_handler($parser, "startElement", "endElement");
xml_set_character_data_handler($parser, "characterData");
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);
?>
အထက်ပါကုဒ်ကိုကွပ်မျက်ပြီးနောက် output သည်အောက်ပါအတိုင်းဖြစ်သည် -
Tag: ns2:child, Content: Content A
Tag: ns1:grandchild, Content: Content B
Tag: ns2:child, Content:
Tag: ns1:parent, Content:
Tag: ns1:root, Content:
output မှကြည့်ရှုနိုင်
Tag Name တွင်အပြည်ပြည်ဆိုင်ရာခွဲခြားသတ်မှတ်ထားသည့် namespace ရှေ့ဆက်နှင့်အမည်ပါ 0 င်သည် ။
အကြောင်းအရာမှန်ကန်စွာသက်ဆိုင်ရာ tag ကိုမှန်ကန်စွာကိုက်ညီ။
stack ယန္တရားသည်မှန်ကန်သောအဆင့်ဆင့်အပြောင်းအလဲများကိုသေချာစေသည်။
သာမန်ခွဲခြမ်းစိတ်ဖြာသူများအစား XML_Parser_create_ns ကို အသုံးပြုခြင်းသည် namespaces ကိုပိုမိုကောင်းမွန်စွာထောက်ခံနိုင်သည်။
ဆင်ခြင်တုံတရားဖွဲ့စည်းပုံကိုကျိုးကြောင်းဆီလျော်စွာဒီဇိုင်းရေးဆွဲခြင်းဖြင့်မည်သည့်အတိမ်အနက်ကိုမဆိုအသိုက်ပြုလုပ်နိုင်သည်။
နောက်ဆက်တွဲအပြောင်းအလဲများတည်ဆောက်ခြင်းကိုလွယ်ကူချောမွေ့စေသည့် namespace ရှေ့ဆက်များဖော်ထုတ်ခြင်းကိုလွယ်ကူချောမွေ့စေရန် $ Supportator ကို သုံးပါ။
အမှားကိုင်တွယ်ယန္တရားနှင့်အတူပေါင်းစပ်, အစီအစဉ်ကြံ့ခိုင်မှုကိုတိုးတက်အောင်လုပ်ပါ။
ဤ parsing နည်းလမ်းသည် Web 0 န်ဆောင်မှုများ, configuration file parsing စသည့် XML ၏ဖွဲ့စည်းပုံနှင့် names များ၏ဖွဲ့စည်းပုံနှင့် namespace တွင်တင်းကျပ်သောလိုအပ်ချက်များရှိသည့်အခြေအနေများအတွက်သင့်တော်သည်။
ခွဲခြမ်းစိတ်ဖြာခြင်းသို့မဟုတ်အရာဝတ်ထုထဲသို့ပြောင်းလဲခြင်းကဲ့သို့သောခွဲခြမ်းစိတ်ဖြာရလဒ်များကိုသင်ထပ်မံပြောင်းလဲရန်လိုအပ်ပါက PHP ၏ပြောင်းလွယ်ပြင်လွယ်မှုကိုအပြည့်အဝကစားရန် callback function ကိုထည့်သွင်းစဉ်းစားနိုင်သည်။
ဒီမျှဝေမှုကသင့်ကိုရှုပ်ထွေးတဲ့ namespaces နဲ့အလွှာပေါင်းစုံ xml parsing ပြ problems နာတွေကိုပိုမိုကောင်းမွန်အောင်ကိုင်တွယ်နိုင်မယ်လို့မျှော်လင့်ပါတယ်။