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

XML_Parse_into_struct သည်သာမန်အမှားများ - ပျက်ကွက်ခြင်းနှင့်ဖြေရှင်းနည်းများခွဲခြမ်းစိတ်ဖြာခြင်းအကြောင်းရင်းများ

gitbox 2025-06-05

1 ။ နိဒါန်း

XML_Parse_into_struct () သည် Expat XML parsing စာကြည့်တိုက်ကို အခြေခံ. လုပ်ဆောင်ချက်တစ်ခုဖြစ်ပြီး၎င်း၏ရှေ့ပြေးပုံစံသည်အောက်ပါအတိုင်းဖြစ်သည် -

 int xml_parse_into_struct ( resource $parser , string $data , array &$values [, array &$index ] )
  • $ parser : XML_Parser_Create () မှဖန်တီးထားသော parser ။

  • $ ဒေတာ : xml string ကိုခွဲခြမ်းစိတ်ဖြာရန်။

  • $ တန်ဖိုးများ - စီစဉ်ထားသည့် XML ဒေတာအဆောက်အအုံများကိုစီစဉ်ထားသည်။

  • $ အညွှန်းကိန်း : optional ကို, optional, optional, တံဆိပ်နာမဆိုတဲ့တံဆိပ်နှင့်သက်ဆိုင်ရာအညွှန်းကိန်းကိုမှတ်တမ်းတင်ရန်အသုံးပြုသည်။

function သည် parsing အောင်မြင်မှုကိုညွှန်ပြရန် 1 ပြန်ရောက်သည်။


2 ။ ဘုံခွဲခြမ်းစိတ်ဖြာအမှားအယွင်းများနှင့်အကြောင်းပြချက်

1 ။ XML format အမှားအမှား

XML သည်အလွန်တင်းကြပ်သော format ရာဝစ်အတွက်လိုအပ်ချက်များနှင့်အတူ markup language ဖြစ်ပြီး,

  • unclesed tags များ

  • အဆိုပါ attribute ကိုကိုးကားမပေးပါ

  • တရားမဝင်သောဇာတ်ကောင်များ (ထိုကဲ့သို့သောထိန်းချုပ်မှုဇာတ်ကောင်များကဲ့သို့)

  • tag ကို nesting အမှား

နမူနာကုဒ်:

 $data = '<root><item>Test</root>'; // မရှိသော </item> ကပ်တံဆိပ်
$parser = xml_parser_create();
if (!xml_parse_into_struct($parser, $data, $values)) {
    echo "XML Error: " . xml_error_string(xml_get_error_code($parser));
}
xml_parser_free($parser);

ထုတ်လုပ်မှု -

 XML Error: mismatched tag

2 ။ မတိုက်ဆိုင် coding

XML ကြေငြာချက် ( <? XML ဗားရှင်း = "1.0" encoding = "Utf-8" ) encoding = "Utf-8" encoding encoding encoding encoding encoding encoding encoding encoding encoding နှင့်ကိုက်ညီသည်။

ဥပမာအားဖြင့်, ဖိုင်ကို UTF-8 ဟုကြေငြာခဲ့သော်လည်းအကြောင်းအရာသည်အမှန်တကယ် GBK encoded ဖြစ်ပြီးတရားမ 0 င်ဇာတ်ကောင်အမှားတစ်ခုပစ်သည်။

ဖြေရှင်းချက် -

  • ဖိုင် encoding နှင့် xml ကြေငြာချက်တသမတ်တည်းဖြစ်ကြောင်းသေချာပါစေ။

  • UTF-8 သို့ပြောင်းရန် MB_ConVert_encoding () ကိုသုံးပါ။

 $data = mb_convert_encoding($data, 'UTF-8', 'GBK');

3 ။ အထူးအက္ခရာများမှလွတ်လွဲပြီမဟုတ်

< , > နှင့် " နှင့် " XML တွင် XML တွင်အထူးအက္ခရာများဖြစ်သည်။

  • <& ဒု;

  • >& GT;

  • && amp;

ဥပမာအားဖြင့်:

 $data = '<note>Tom & Jerry</note>'; // အမှား:မလွတ်မြောက် &

ပြောင်းလဲသင့်သည် -

 $data = '<note>Tom &amp; Jerry</note>';

4 ။ တရားမဝင် namespace သို့မဟုတ် tag နာမခံ

အမည်များအမည်များသည်နံပါတ်များသို့မဟုတ်အထူးအက္ခရာများဖြင့် စတင်. မရပါ။ ဥပမာအားဖြင့်:

 <123tag>value</123tag> <!-- တရားမဝင်သော -->
<tag name="a b">value</tag> <!-- attribute တန်ဖိုးများအတွက်နေရာများကိုကိုးကားမထားဘူး -->

3 ။ စိတ်ကူးများနှင့် debugging ကျွမ်းကျင်မှုစီစဉ်ခြင်း

1 ။ XML_GEget_error_code () နှင့် xml_get_cubrent_line_number_number_number_number

ဤရွေ့ကားလုပ်ဆောင်ချက်နှစ်ခုကသင့်အားလျင်မြန်စွာပြ the နာကိုရှာဖွေရန်ကူညီနိုင်သည်။

 if (!xml_parse_into_struct($parser, $data, $values)) {
    echo "Error: " . xml_error_string(xml_get_error_code($parser)) . 
         " at line " . xml_get_current_line_number($parser);
}

2 ။ အွန်လိုင်း XML verification tool ကိုသုံးပါ

ပြ esh နာဖြေရှင်းခြင်းလုပ်ငန်းစဉ်အတွင်း xml ကို https://gitbox.net/tools/xml-validiated အဖြစ် paste လုပ်နိုင်သည်။

3 ။ မူရင်း XML စာပိုဒ်များကိုပုံနှိပ်ပါ

အကယ်. XML သည်ဝေးလံခေါင်သီသော interface သို့မဟုတ်ပြင်ပဖိုင်တစ်ခုမှဖြစ်ပေါ်လာပါကခွဲခြမ်းစိတ်ဖြာခြင်းမပြုမီအောက်ပါတို့ကိုသန့်ရှင်းစင်ကြယ်စေရန်နှင့်မှတ်တမ်းတင်ရန်အကြံပြုသည်။

 file_put_contents('/tmp/raw_xml.log', $data);

အောက်ပါသန့်ရှင်းရေးလုပ်ဆောင်ချက်ကိုအသုံးပြုရန်လည်းအကြံပြုပါသည်။

 function clean_xml($data) {
    $data = trim($data);
    // ရေွှ့ BOM
    $data = preg_replace('/^\xEF\xBB\xBF/', '', $data);
    // မမြင်ရသောဇာတ်ကောင်များကိုဖျက်ပါ
    return preg_replace('/[^\x09\x0A\x0D\x20-\x7F\xA0-\xFF]/', '', $data);
}

4 ။ အကြံပြုချက်များကိုင်တွယ်

1 ။ LibxMl အမှားအယွင်းအစီရင်ခံစာကိုဖွင့်ပါ

XML_Parse_into_struct () သည် dom ကိုမသုံးသော်လည်း XML ကိုဖတ်ရှုခြင်းမပြုမီ XML ကိုဖတ်ရှုခြင်းမပြုမီ Dom သည် dom ကို မသုံးပါ။

 libxml_use_internal_errors(true);

2 ။ အခြားရွေးချယ်စရာ - SimpendXML (သို့) dom ကိုသုံးပါ

XML အတွက်ရှင်းရှင်းလင်းလင်းဖွဲ့စည်းပုံနှင့်ကောင်းသောပုံစံဖြင့်ရိုးရှင်းသော Simplexml ကိုပိုမိုအကြံပြုပါသည်။

 $xml = simplexml_load_string($data);

၎င်းသည် ပိုမို. ရင်းနှီးသောအရာဝတ်ထု interface နှင့်ပိုမိုမြင့်မားသောအမှားသည်းခံမှုကိုပေးသည်။