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 ပြန်ရောက်သည်။
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
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');
< , > နှင့် " နှင့် " XML တွင် XML တွင်အထူးအက္ခရာများဖြစ်သည်။
< → & ဒု;
> → & GT;
& → & amp;
ဥပမာအားဖြင့်:
$data = '<note>Tom & Jerry</note>'; // အမှား:မလွတ်မြောက် &
ပြောင်းလဲသင့်သည် -
$data = '<note>Tom & Jerry</note>';
အမည်များအမည်များသည်နံပါတ်များသို့မဟုတ်အထူးအက္ခရာများဖြင့် စတင်. မရပါ။ ဥပမာအားဖြင့်:
<123tag>value</123tag> <!-- တရားမဝင်သော -->
<tag name="a b">value</tag> <!-- attribute တန်ဖိုးများအတွက်နေရာများကိုကိုးကားမထားဘူး -->
ဤရွေ့ကားလုပ်ဆောင်ချက်နှစ်ခုကသင့်အားလျင်မြန်စွာပြ 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);
}
ပြ esh နာဖြေရှင်းခြင်းလုပ်ငန်းစဉ်အတွင်း xml ကို https://gitbox.net/tools/xml-validiated အဖြစ် paste လုပ်နိုင်သည်။
အကယ်. 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);
}
XML_Parse_into_struct () သည် dom ကိုမသုံးသော်လည်း XML ကိုဖတ်ရှုခြင်းမပြုမီ XML ကိုဖတ်ရှုခြင်းမပြုမီ Dom သည် dom ကို မသုံးပါ။
libxml_use_internal_errors(true);
XML အတွက်ရှင်းရှင်းလင်းလင်းဖွဲ့စည်းပုံနှင့်ကောင်းသောပုံစံဖြင့်ရိုးရှင်းသော Simplexml ကိုပိုမိုအကြံပြုပါသည်။
$xml = simplexml_load_string($data);
၎င်းသည် ပိုမို. ရင်းနှီးသောအရာဝတ်ထု interface နှင့်ပိုမိုမြင့်မားသောအမှားသည်းခံမှုကိုပေးသည်။