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

XML_PARSSE ကို အသုံးပြု. အသိုက် XML ကိုကိုင်တွယ်သောအခါဘုံခွဲခြမ်းစိတ်ဖြာအမှားများကိုရှောင်ရှားရန်?

M66 2025-05-13

PHP တွင် XML တွင် processing processing သည်အထူးသဖြင့်တတိယပါတီ၏ interfaces များသို့မဟုတ် configuration files များနှင့်အတူ docking လုပ်သည့်အခါတွင်ဘုံလိုအပ်ချက်တစ်ခုဖြစ်သည်။ XML_Parse () သည် PHP မှ XML အချက်အလက်များကိုခွဲခြမ်းစိတ်ဖြာရန် PHP မှပေးသောအခြေခံလုပ်ဆောင်ချက်တစ်ခုဖြစ်သည်။ သို့သော်သင် XML ကိုအသိုက်ဖွဲ့စည်းပုံများသို့မဟုတ်ရှုပ်ထွေးသောပုံစံများစွာဖြင့်ကိုင်တွယ်သောအခါသင်ဂရုမစိုက်ပါကခွဲခြမ်းစိတ်ဖြာခြင်းအမှားများကိုသင်ကြုံတွေ့ရနိုင်သည်။

ဤဆောင်းပါးသည် XML_Parse () အသိုက် XML ကိုကိုင်တွယ်ဖြေရှင်းသည့်အခါတူညီသောခွဲခြမ်းစိတ်ဖြာမှုအမှားများကိုမည်သို့ရှောင်ရှားရမည်ကိုရှင်းပြပါမည်။

1 ။ XML_Parse ၏အခြေခံအသုံးပြုမှုကိုနားလည်ပါ

PHP ၏ XML parsing သည်များသောအားဖြင့်ဖြစ်ရပ် - မောင်းနှင်သောစနစ်ကိုအသုံးပြုလေ့ရှိပြီးအောက်ပါလုပ်ဆောင်ချက်များကိုအသုံးပြုသည်။

ဤတွင် XML parsing ဥပမာတစ်ခုဖြစ်သည်။

 <?php

$xml = <<<XML
<books>
    <book>
        <title>PHP အစီအစဉ်</title>
        <author>Zhang San</author>
    </book>
    <book>
        <title>XML အမှန်တကယ်တိုက်ခိုက်ရေး</title>
        <author>li si</author>
    </book>
</books>
XML;

$parser = xml_parser_create();

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

function startElement($parser, $name, $attrs) {
    echo "Element ကိုစတင်ပါ: $name\n";
}

function endElement($parser, $name) {
    echo "Ender: $name\n";
}

function characterData($parser, $data) {
    if (trim($data)) {
        echo "ဇာတ်ကောင်ဒေတာ: $data\n";
    }
}

if (!xml_parse($parser, $xml, true)) {
    die("XML အမှား: " . xml_error_string(xml_get_error_code($parser)) .
        " အတွက် " . xml_get_current_line_number($parser) . " အိုကေ");
}

xml_parser_free($parser);
?>

2 ။ မကြာခဏဆိုသလိုအသိုက် xml ကိုင်တွယ်သောအခါမကြာခဏမေးခွန်းများနှင့်ဖြေရှင်းချက်

1 ။ ဇာတ်ကောင်ဒေတာကိုအကြိမ်ပေါင်းများစွာအစပျိုးသည်

အထူးသဖြင့်ဒြပ်စင်များအကြားလိုင်းချိုးဖောက်မှုများရှိပါက elements များကိုနက်နက်နဲနဲအသိုက်ထားသည့်အခါ စရိုက် လက်ခဏာကိုအကြိမ်ပေါင်းများစွာအစပျိုးနိုင်သည်။ အကြောင်းအရာကို cache variable များကို သုံး. စုဆောင်းသင့်သည်။ ထို့နောက် endelement () တွင်ပါဝင်သည်။

 $depth = 0;
$currentTag = '';
$contentBuffer = [];

function startElement($parser, $name, $attrs) {
    global $depth, $currentTag;
    $depth++;
    $currentTag = $name;
}

function endElement($parser, $name) {
    global $depth, $currentTag, $contentBuffer;
    if (isset($contentBuffer[$depth])) {
        echo "ဓါတ် $name ၏တန်ဖိုး: " . trim($contentBuffer[$depth]) . "\n";
        unset($contentBuffer[$depth]);
    }
    $depth--;
}

function characterData($parser, $data) {
    global $depth, $contentBuffer;
    if (!isset($contentBuffer[$depth])) {
        $contentBuffer[$depth] = '';
    }
    $contentBuffer[$depth] .= $data;
}

2 ။ တရားမ 0 င်ဇာတ်ကောင်များသည်ပျက်ကွက်ရန်ခွဲခြမ်းစိတ်ဖြာခြင်းဖြစ်ပေါ်စေသည်

အချို့သော XML တွင်ထိန်းချုပ်မှုဇာတ်ကောင် များ ,

 $xml = preg_replace('/[^\x09\x0A\x0D\x20-\x7F]/u', '', $xml); // တရားမဝင်ဇာတ်ကောင်များကိုဖယ်ရှားပါ
$xml = str_replace('&', '&amp;', $xml); // unecoded လွတ်မြောက်ရန် &

တရားဝင် XML အဖွဲ့အစည်းများမပျက်စီးနိုင်ကြောင်းသေချာစေရန်အကြိမ်ကြိမ်မလွတ်ခိုင်းရန်သတိထားပါ။

3 ။ Utf-8 encoding အမှား

xml data သည် UTF-8 encoded နှင့် parser creation ဖြစ်သည့်အခါသတ်မှတ်ထားကြောင်းသေချာပါစေ။

 $parser = xml_parser_create('UTF-8');
xml_parser_set_option($parser, XML_OPTION_TARGET_ENCODING, 'UTF-8');

4 ။ အသိုက်နှောင်ကြိုးမှန်ကန်စွာကိုင်တွယ်ကြသည်မဟုတ်

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

 $elementStack = [];

function startElement($parser, $name, $attrs) {
    global $elementStack;
    array_push($elementStack, $name);
}

function endElement($parser, $name) {
    global $elementStack;
    array_pop($elementStack);
}

stack မှတဆင့်, သင်သည်လက်ရှိလမ်းကြောင်းသို့မဟုတ်အဆင့်ဆင့်ကိုအချိန်မှန်အတွက်ရနိုင်ပြီး XML ဖွဲ့စည်းပုံကိုကိုယ်စားပြုရန် Multensional Array ကိုပင်တည်ဆောက်နိုင်သည်။

3 ။ လက်တွေ့ကျသောအကြံပြုချက်များ

  • ပြင်ပ XML အရင်းအမြစ်များအတွက်တော့မအောင်မြင်မှုကြောင့်စာမျက်နှာပျက်နေခြင်းမှကာကွယ်ရန်ခြွင်းချက်များထည့်သွင်းရန်သေချာပါစေ။

  • LibxMl_use_internal_Eruor () Simplexml_load_string () ကို အသုံးပြု. လုပ်ငန်းစဉ်၏ပျက်ကွက်မှုအတွက်အခြားရွေးချယ်စရာဖြေရှင်းချက်တစ်ခုအဖြစ်အသုံးပြုပါ။

  • အကယ်. သင်သည် XML ကို https://api.m66.net/data.xml ကဲ့သို့သော interface တစ်ခုမှဖတ်ပါ။

 $xmlContent = file_get_contents("https://api.m66.net/data.xml");
if ($xmlContent === false) {
    die("တင်. မရပါ XML အချက်များ");
}

အကျဉ်းချုပ်

XML_Parse ()) ကို အသုံးပြုသောအခါ XML ကိုအသုံးပြုခြင်းကိုအသုံးပြုသောအခါ, ဘုံခွဲခြမ်းစိတ်ဖြာမှုအမှားများသည်မကိုက်ညီသောဇာတ်ကောင်များ, တရားမ 0 င်အက္ခရာများ, ကျိုးကြောင်းဆီလျော်သော coding သတ်မှတ်ချက်များ,

နောက်ခံခွဲခြမ်းစိတ်ဖြာမှုယုတ္တိဗေဒကိုကျွမ်းကျင်စေခြင်းကသင့်အား XML data structures များကိုပိုမိုထိရောက်သော XML ဒေတာတည်ဆောက်ပုံများကိုထိရောက်စွာလုပ်ဆောင်နိုင်ရန်ကူညီနိုင်သည်။

ခွဲခြမ်းစိတ်ဖြာခြင်းလုပ်ငန်းစဉ်ကိုထပ်မံရှင်းလင်းရန်လိုအပ်ပါက code ကိုပိုမိုကောင်းမွန်စွာပြန်လည်အသုံးပြုရန်နှင့်ထိန်းသိမ်းရန်အတွက် parser နှင့်ဒေတာစုဆောင်းခြင်းယုတ္တိဗေဒကိုစီမံရန်အတန်းတစ်ခုစီကို encapsulating ကိုသင်စဉ်းစားနိုင်သည်။

  • သက်ဆိုင်သောတက်(ဂ်)များ:

    xml_parse