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

XML_PARSE မျိုးစုံမှ XML ဖိုင်များကို XML_Parse မှတဆင့်မည်သို့ခွဲခြမ်းစိတ်ဖြာနည်း

M66 2025-04-28

XML Standard တွင် Legal XML စာရွက်စာတမ်းတစ်ခုတွင် root elem ဒြပ်စင်တစ်ခုသာရှိသင့်သည်။ သို့သော်လက်တွေ့ကျသော application အခြေအနေများတွင်တစ်ခါတစ်ရံတွင် root element မျိုးစုံပါ 0 င်သောဖိုင်များကဲ့သို့သော XML ဖိုင်များတွင် XML ဖိုင်အချို့ကိုကြုံတွေ့ရလိမ့်မည်။ PHP ၏ XML_Parse Parser ကိုအသုံးပြုသောအခါဤဖွဲ့စည်းပုံသည်ပြ problems နာများဖြစ်စေနိုင်သည်။

ဒါဆို root element တွေပါတဲ့ဒီ XML ဖိုင်ကိုဘယ်လိုမှန်ကန်စွာခွဲခြမ်းစိတ်ဖြာနိုင်သလဲ။ ဤဆောင်းပါးသည်ဤပြ problem နာကိုတစ်ဆင့်ချင်းဖြေရှင်းရန်သင့်အားယူပါလိမ့်မည်။

မေးခွန်းဥပမာ

အောက်ပါအကြောင်းအရာများနှင့်အတူ XML ဖိုင်ဒေတာကိုဤကဲ့သို့သော XML ဖိုင် ဒေတာ ရှိသည်ဟုမြင်ယောင်ကြည့်ပါ။

 <item>
  <name>Item 1</name>
</item>
<item>
  <name>Item 2</name>
</item>

စံ XML တွင်၎င်းတွင်တရားမ 0 င်သောကြောင့်၎င်းတွင်ထိပ်တန်း <item> element နှစ်ခုပါ 0 င်သောကြောင့်တရားမ 0 င်ပါ။

နည်းလမ်း 1: တစ်ခုတည်း node ကိုသို့အထုပ်

ဘုံဖြေရှင်းနည်းသည်ပရိုဂရမ်ရှိဤအကြောင်းအရာများအတွက် "virtual" root node ကို root node တစ်ခုထည့်ရန်ဖြစ်သည်။

 $xmlContent = file_get_contents('https://m66.net/data.xml');

// virtual အမြစ် node ကိုခြုံ
$xmlContent = "<root>$xmlContent</root>";

$parser = xml_parser_create();
xml_parse_into_struct($parser, $xmlContent, $values, $index);
xml_parser_free($parser);

print_r($values);

ဤနည်းအားဖြင့် XML_PARESES သည် စာရွက်စာတမ်းတစ်ခုလုံးကိုတရားဝင် XML ဖိုင်တစ်ခုအဖြစ်ကုသနိုင်သည်။

နည်းလမ်း 2- စာနယ်ဇင်းအလိုက်မျိုးစုံအပိုင်းအစများကိုဆန်းစစ်ပါ

အကယ်. XML ဖိုင်သည်အလွန်ကြီးမားသည်ဆိုလျှင်သို့မဟုတ်အရာအားလုံးကိုတစ်ပြိုင်တည်းမဖတ်ချင်ပါက XML_Parse ၏ streaming နည်းလမ်းကို သုံး. ၎င်းကိုအပိုင်းအစတစ်ခုခွဲခြမ်းစိတ်ဖြာရန်လည်း streaming method ကိုလည်းသုံးနိုင်သည်။

 $parser = xml_parser_create();

function startElement($parser, $name, $attrs) {
    echo "Start: $name\n";
}

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

function characterData($parser, $data) {
    echo "Data: " . trim($data) . "\n";
}

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

$handle = fopen("https://m66.net/data.xml", "r");
if ($handle) {
    // တစ်ခုချင်းစီကိုထုပ်ပိုး <item> အပိုင်းအစ,segment အားဖြင့်ခွဲခြမ်းစိတ်ဖြာခြင်းအတွက် virtual အမြစ် element တွေကိုထည့်ပါ
    $chunk = '';
    while (($line = fgets($handle)) !== false) {
        $chunk .= $line;
        if (strpos($line, '</item>') !== false) {
            $xml = "<root>$chunk</root>";
            xml_parse($parser, $xml, true);
            $chunk = '';
        }
    }
    fclose($handle);
}

xml_parser_free($parser);