လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> ရှုပ်ထွေးသော XML ဒေတာတည်ဆောက်ပုံနှင့်ကိုက်ညီရန် XML_Parse ၏ element processor ကိုစိတ်ကြိုက်ပြင်ဆင်နည်း

ရှုပ်ထွေးသော XML ဒေတာတည်ဆောက်ပုံနှင့်ကိုက်ညီရန် XML_Parse ၏ element processor ကိုစိတ်ကြိုက်ပြင်ဆင်နည်း

M66 2025-05-13

PHP ၏ Built-in XML Parser (Expat စာကြည့်တိုက်ပေါ် မူတည်. ) ကို (Expat စာကြည့်တိုက်) ကိုအခြေခံသည့်အခါအလွန်အစွမ်းထက်သောကိရိယာတစ်ခုဖြစ်သည်။ xml_parser_create () နှင့်ပူးတွဲပါအပြောင်းအလဲများလုပ်ဆောင်ချက်များအားဖြင့်ကျွန်ုပ်တို့သည် XML ဖွဲ့စည်းပုံကိုပြောင်းလွယ်ပြင်လွယ်နိုင်သည်။ အထူးသဖြင့်သင်သည် XML စာရွက်စာတမ်းများကိုနက်ရှိုင်းသောအသိုက်အဆင့်ဆင့်နှင့်ဒြပ်စင်များစွာနှင့်ရင်ဆိုင်နေရသည့်အခါစိတ်ကြိုက် element handler သည် parsing ထိရောက်မှုနှင့်ဖတ်နိုင်မှုကိုသိသိသာသာတိုးတက်စေလိမ့်မည်။

XML_SET_ELEMEMENTER_HANDLER () ကို အသုံးပြုနည်း (XML element processor ကိုစိတ်ကြိုက်ပြုလုပ်နိုင်ရန်နှင့်ရှုပ်ထွေးသော XML ဒေတာဖွဲ့စည်းပုံကိုနမူနာကုဒ်နှင့်ခွဲခြမ်းစိတ်ဖြာရန်ဤဆောင်းပါးကဤဆောင်းပါးကအသေးစိတ်ရှင်းပြပါလိမ့်မည်။

1 ။ XML element processor ဆိုတာဘာလဲ။

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 ည့်သည်ခင်းကျင်းသည်။

2 ။ ဥပမာ - တစ် ဦး အသိုက်ရှုပ်ထွေးသော XML ဒေတာကိုဆန်းစစ်

ကျွန်ုပ်တို့သည် 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 ကိုကျွန်ုပ်တို့ရေးပါမည်။

3 ။ စိတ်ကြိုက်ပရိုဆက်ဆာအကောင်အထည်ဖော်မှု

 <?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";
}

4 ။ အကောင်းမြင်နည်းစနစ်များနှင့်အကြံပြုချက်များ

  1. status variable တွေကိုအသုံးပြု။ ခြေရာခံခြင်းအခြေအနေ $ curraltag နှင့် $ calmebook ကဲ့သို့သောပြည်နယ် variable များသည်အလွန်အရေးကြီးသည်။

  2. whitespace ဇာတ်ကောင် filter
    စတီဝေးတာသည် အသစ်အဆန်းများနှင့်နေရာများစွာကိုရရှိနိုင်ပါသည်

  3. ထပ်ခါတလဲလဲတာဝန်များကိုရှောင်ကြဉ်ပါ အချို့သော tag အကြောင်းအရာများကို segments များ (အထူးသဖြင့်ရှည်လျားသောစာသား) တွင်ပြန်လည်အသုံးပြုခြင်းနှင့်အသုံးပြုခြင်းကိုပြန်လည်သုံးသပ်နိုင်သည် ။ = splicing သည်ဒေတာကိုခြင်းကိုတားဆီးနိုင်သည်။

  4. ရှုပ်ထွေးသော XML process လုပ်ရန် namespace ကိုအသုံးပြုခြင်း
    XML သည် namespace ကိုအသုံးပြုပါက Xml_set_start_start_start_decl_handler ကဲ့သို့သောအဆင့်မြင့် APIs များကိုအသုံးပြုရန်အကြံပြုသည်။