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

XML_Parse တွင်အသိုက် XML စာရွက်စာတမ်းများကိုမည်သို့ထုတ်ဖော်ပြနိုင်မည်နည်း

M66 2025-05-12

PHP တွင် XML စာရွက်စာတမ်းများနှင့်အလုပ်လုပ်သောအခါ XML_Parse () သည်အဆင့်နိမ့်သော်လည်းကောင်းသောလုပ်ဆောင်မှုဖြစ်သည်။ ၎င်းသည်ဖြစ်ရပ်မှန်မောင်းနှင်သည့်ခွဲခြမ်းစိတ်ဖြာမှုမော်ဒယ်များအပေါ်မှီခိုနေရသည်, ထို့ကြောင့်သင်နှင့်သက်ဆိုင်သော callback function ကိုမှတ်တမ်းတင်ခြင်း,

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

1 ။ XML ဒေတာနမူနာ

 <catalog>
    <book id="1">
        <title>PHP Basics</title>
        <author>John Doe</author>
    </book>
    <book id="2">
        <title>Advanced PHP</title>
        <author>Jane Smith</author>
    </book>
</catalog>

2 ။ parser ဖန်တီးနှင့် processing လုပ်ဆောင်ချက်များကို set up လုပ်ပါ

ကျနော်တို့ parser ဖန်တီးရန်နှင့် callback လုပ်ဆောင်ချက်သုံးခုကို set up လုပ်ဖို့လိုအပ်ပါတယ်:

  • Stingelement () - parser သည် start tag ကိုတွေ့သောအခါခေါ်ယူသောအခါ,

  • EndoTement () - parser သည် End tag ကိုတွေ့သောအခါခေါ်ယူသောအခါ,

  • စတီဝေးတာ () - parser parser စာသားကို tag တွင်တွေ့သောအခါခေါ်ပါ။

3 ။ recursive ဖွဲ့စည်းပုံကိုအကောင်အထည်ဖော်ရန်သော့ချက် - သစ်ပင်ကဲ့သို့သောခင်းကျင်းမှုတစ်ခုတည်ဆောက်ခြင်း

ဤတွင်အပြည့်အဝကုဒ်ဥပမာတစ်ခုဖြစ်သည်:

 <?php

$xml = <<<XML
<catalog>
    <book id="1">
        <title>PHP Basics</title>
        <author>John Doe</author>
    </book>
    <book id="2">
        <title>Advanced PHP</title>
        <author>Jane Smith</author>
    </book>
</catalog>
XML;

$parser = xml_parser_create();
$dataStack = [];
$currentData = null;

// tag ကိုစတင်ပါ
function startElement($parser, $name, $attrs) {
    global $dataStack, $currentData;

    $element = [
        'tag' => $name,
        'attributes' => $attrs,
        'children' => [],
        'value' => ''
    ];

    if ($currentData !== null) {
        array_push($dataStack, $currentData);
    }

    $currentData = $element;
}

// tag tag
function endElement($parser, $name) {
    global $dataStack, $currentData;

    if (!empty($dataStack)) {
        $parent = array_pop($dataStack);
        $parent['children'][] = $currentData;
        $currentData = $parent;
    }
}

// စာသားအကြောင်းအရာ
function characterData($parser, $data) {
    global $currentData;

    if (isset($currentData['value'])) {
        $currentData['value'] .= trim($data);
    }
}

xml_set_element_handler($parser, "startElement", "endElement");
xml_set_character_data_handler($parser, "characterData");

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);

// နောက်ဆုံးဖွဲ့စည်းပုံကိုပုံနှိပ်ပါ
print_r($currentData);
?>

4 ။ ဖွဲ့စည်းပုံကိုဖော်ပြချက်ဖော်ပြချက်

ခွဲခြမ်းစိတ်ဖြာပြီးနောက်, သင်သည်အောက်ပါနှင့်ဆင်တူသောအသိုက်ခင်းကျင်းဖွဲ့စည်းပုံကိုရရှိမည်ဖြစ်သည်။

 Array
(
    [tag] => CATALOG
    [attributes] => Array()
    [children] => Array
        (
            [0] => Array
                (
                    [tag] => BOOK
                    [attributes] => Array ( [ID] => 1 )
                    [children] => Array
                        (
                            [0] => Array ( [tag] => TITLE [value] => PHP Basics )
                            [1] => Array ( [tag] => AUTHOR [value] => John Doe )
                        )
                )
            [1] => Array
                (
                    [tag] => BOOK
                    [attributes] => Array ( [ID] => 2 )
                    [children] => Array
                        (
                            [0] => Array ( [tag] => TITLE [value] => Advanced PHP )
                            [1] => Array ( [tag] => AUTHOR [value] => Jane Smith )
                        )
                )
        )
)

5 ။ ခွဲခြမ်းစိတ်ဖြာဖွဲ့စည်းပုံကို JSON သို့မဟုတ်အခြားပုံစံများသို့ပြောင်းပါ

အထက်ပါခင်းကျင်းဖွဲ့စည်းပုံကိုရှေ့တန်းမှခေါ်ဆိုမှုသို့မဟုတ် interface output အတွက် JSON သို့အလွယ်တကူပြောင်းနိုင်သည်။

 echo json_encode($currentData, JSON_PRETTY_PRINT);

ခြောက်လ။ အကြံပေးချက်များ

  • အကယ်. XML စာရွက်စာတမ်းသည် https://m66.net/data/books.xml ကဲ့သို့သောကွန်ယက်မှလာသည်ဆိုပါစို့