PHP ၏ Built-in XML Parser (Expat စာကြည့်တိုက်ပေါ် မူတည်. ) ကို (Expat စာကြည့်တိုက်) ကိုအခြေခံသည့်အခါအလွန်အစွမ်းထက်သောကိရိယာတစ်ခုဖြစ်သည်။ xml_parser_create () နှင့်ပူးတွဲပါအပြောင်းအလဲများလုပ်ဆောင်ချက်များအားဖြင့်ကျွန်ုပ်တို့သည် XML ဖွဲ့စည်းပုံကိုပြောင်းလွယ်ပြင်လွယ်နိုင်သည်။ အထူးသဖြင့်သင်သည် XML စာရွက်စာတမ်းများကိုနက်ရှိုင်းသောအသိုက်အဆင့်ဆင့်နှင့်ဒြပ်စင်များစွာနှင့်ရင်ဆိုင်နေရသည့်အခါစိတ်ကြိုက် element handler သည် parsing ထိရောက်မှုနှင့်ဖတ်နိုင်မှုကိုသိသိသာသာတိုးတက်စေလိမ့်မည်။
XML_SET_ELEMEMENTER_HANDLER () ကို အသုံးပြုနည်း (XML element processor ကိုစိတ်ကြိုက်ပြုလုပ်နိုင်ရန်နှင့်ရှုပ်ထွေးသော XML ဒေတာဖွဲ့စည်းပုံကိုနမူနာကုဒ်နှင့်ခွဲခြမ်းစိတ်ဖြာရန်ဤဆောင်းပါးကဤဆောင်းပါးကအသေးစိတ်ရှင်းပြပါလိမ့်မည်။
XML_Parse ကို သုံး. XML စီးဆင်းမှုကိုခွဲခြမ်းစိတ်ဖြာခြင်း () parser အတွက် callback functions နှစ်ခုကို xml_set_element_Handler () -
StartGefandler : tag ကိုစတင်ရန် callback function ကို
endelementhandler : အဆုံးသတ်သည့်အမှတ်အသားများအတွက် callback function ကို
ဤလုပ်ဆောင်ချက်နှစ်ခု၏လက်မှတ်များသည်များသောအားဖြင့်အောက်ပါအတိုင်းဖြစ်သည် -
function startElement($parser, $name, $attrs)
function endElement($parser, $name)
$ name သည်လက်ရှိ Node ၏အမည်နှင့် $ attrie များ၏ အမည်မှာ node ကိုကိုယ်စားပြုသည့် activity ည့်သည်ခင်းကျင်းသည်။
ကျွန်ုပ်တို့သည် XML အချက်အလက်များကို API မှအောက်ပါပုံစံဖြင့်ရရှိသည်ဆိုပါစို့။
<catalog>
<book id="001">
<title>PHP ဖွံ့ဖြိုးရေးအလေ့အကျင့်</title>
<author>Zhang San</author>
<price currency="CNY">89.00</price>
</book>
<book id="002">
<title>နက်ရှိုင်းသောနားလည်မှု XML</title>
<author>li si</author>
<price currency="CNY">75.50</price>
</book>
</catalog>
စာအုပ်တစ်အုပ်စီအတွက်ခေါင်းစဉ်, စာရေးသူနှင့်စျေးနှုန်းအချက်အလက်များကိုထုတ်ယူသော parser ကိုကျွန်ုပ်တို့ရေးပါမည်။
<?php
$xmlData = file_get_contents('https://m66.net/api/books.xml');
// parsed ရလဒ်များကိုသိမ်းဆည်းရန်အသုံးပြုခဲ့သည်
$books = [];
$currentBook = [];
$currentTag = "";
// ဖန်တီး XML မိစ်ဆာ
$parser = xml_parser_create("UTF-8");
// အစနှင့်အဆုံး tags များအတွက်အပြောင်းအလဲနဲ့လုပ်ဆောင်ချက်များကိုသတ်မှတ်ပါ
xml_set_element_handler($parser, "startElement", "endElement");
// ဇာတ်ကောင်ဒေတာအပြောင်းအလဲနဲ့ function ကိုသတ်မှတ်ပါ
xml_set_character_data_handler($parser, "characterData");
// 设置မိစ်ဆာ参数
xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, false); // Label Case ကိုတသမတ်တည်းထားပါ
// အပြောင်းအလဲနဲ့လုပ်ဆောင်ချက်များကိုသတ်မှတ်
function startElement($parser, $name, $attrs) {
global $currentBook, $currentTag;
$currentTag = $name;
if ($name == "book") {
$currentBook = [
"id" => $attrs['id'] ?? null,
"title" => "",
"author" => "",
"price" => "",
"currency" => ""
];
}
if ($name == "price" && isset($attrs['currency'])) {
$currentBook['currency'] = $attrs['currency'];
}
}
function endElement($parser, $name) {
global $books, $currentBook, $currentTag;
if ($name == "book") {
$books[] = $currentBook;
$currentBook = [];
}
$currentTag = "";
}
function characterData($parser, $data) {
global $currentBook, $currentTag;
$data = trim($data);
if (empty($data)) return;
switch ($currentTag) {
case "title":
$currentBook["title"] .= $data;
break;
case "author":
$currentBook["author"] .= $data;
break;
case "price":
$currentBook["price"] .= $data;
break;
}
}
// ခွဲခြမ်းစိတ်ဖြာ execute
if (!xml_parse($parser, $xmlData, 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 ကိုခွဲခြမ်းစိတ်ဖြာရလဒ်များ
foreach ($books as $book) {
echo "စာအုပ်ခေါင်းစဉ်: {$book['title']}\n";
echo "စာရေးသူ: {$book['author']}\n";
echo "စြေး: {$book['price']} {$book['currency']}\n";
echo "------------------------\n";
}
status variable တွေကိုအသုံးပြု။ ခြေရာခံခြင်းအခြေအနေ $ curraltag နှင့် $ calmebook ကဲ့သို့သောပြည်နယ် variable များသည်အလွန်အရေးကြီးသည်။
whitespace ဇာတ်ကောင် filter
စတီဝေးတာသည် အသစ်အဆန်းများနှင့်နေရာများစွာကိုရရှိနိုင်ပါသည် ။
ထပ်ခါတလဲလဲတာဝန်များကိုရှောင်ကြဉ်ပါ အချို့သော tag အကြောင်းအရာများကို segments များ (အထူးသဖြင့်ရှည်လျားသောစာသား) တွင်ပြန်လည်အသုံးပြုခြင်းနှင့်အသုံးပြုခြင်းကိုပြန်လည်သုံးသပ်နိုင်သည် ။ = splicing သည်ဒေတာကိုခြင်းကိုတားဆီးနိုင်သည်။
ရှုပ်ထွေးသော XML process လုပ်ရန် namespace ကိုအသုံးပြုခြင်း
XML သည် namespace ကိုအသုံးပြုပါက Xml_set_start_start_start_decl_handler ကဲ့သို့သောအဆင့်မြင့် APIs များကိုအသုံးပြုရန်အကြံပြုသည်။