ตัวแยกวิเคราะห์ Expat ในตัวทำให้สามารถประมวลผลเอกสาร XML ใน PHP ได้
XML ใช้เพื่ออธิบายข้อมูล โดยเน้นที่ข้อมูลนั้นคืออะไร ไฟล์ XML อธิบายโครงสร้างของข้อมูล
ใน XML ไม่มีแท็กที่กำหนดไว้ล่วงหน้า คุณต้องกำหนดแท็กของคุณเอง
หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับ XML โปรดไปที่บทช่วยสอน XML ของเรา
หากต้องการอ่านและอัปเดต - สร้างและประมวลผล - เอกสาร XML คุณต้องมีตัวแยกวิเคราะห์ XML
ตัวแยกวิเคราะห์ XML มีสองประเภทพื้นฐาน:
ตัวแยกวิเคราะห์แบบต้นไม้: ตัวแยกวิเคราะห์นี้แปลงเอกสาร XML ให้เป็นโครงสร้างแบบต้นไม้ โดยจะวิเคราะห์เอกสารทั้งหมดและให้สิทธิ์ในการเข้าถึงองค์ประกอบต่างๆ ในแผนผัง เช่น Document Object Model (DOM)
ตัวแยกวิเคราะห์ตามเหตุการณ์: ถือว่าเอกสาร XML เป็นชุดของเหตุการณ์ เมื่อมีเหตุการณ์เฉพาะเกิดขึ้น parser จะเรียกใช้ฟังก์ชันเพื่อจัดการเหตุการณ์นั้น
ตัวแยกวิเคราะห์ชาวต่างชาติเป็นตัวแยกวิเคราะห์ตามเหตุการณ์
ตัวแยกวิเคราะห์ตามเหตุการณ์มุ่งเน้นไปที่เนื้อหาของเอกสาร XML มากกว่าโครงสร้าง ด้วยเหตุนี้ ตัวแยกวิเคราะห์ตามเหตุการณ์จึงสามารถเข้าถึงข้อมูลได้เร็วกว่าตัวแยกวิเคราะห์แบบต้นไม้
โปรดดูส่วน XML ต่อไปนี้:
<จาก>เจนี่</from>
ตัวแยกวิเคราะห์ตามเหตุการณ์รายงาน XML ข้างต้นเป็นลำดับของสามเหตุการณ์:
องค์ประกอบเริ่มต้น: จาก
เริ่มส่วน CDATA ค่า: Jani
องค์ประกอบปิด: จาก
ตัวอย่าง XML ข้างต้นมี XML ที่มีรูปแบบที่ถูกต้อง อย่างไรก็ตาม อินสแตนซ์นี้เป็น XML ที่ไม่ถูกต้องเนื่องจากไม่มีการประกาศประเภทเอกสาร (DTD) เชื่อมโยงอยู่
อย่างไรก็ตาม สิ่งนี้ไม่ได้สร้างความแตกต่างเมื่อใช้ Expat parser Expat เป็นตัวแยกวิเคราะห์ที่ไม่ตรวจสอบความถูกต้องและละเว้น DTD ใด ๆ
เนื่องจากเป็นตัวแยกวิเคราะห์ XML ตามเหตุการณ์และไม่ผ่านการตรวจสอบ Expat จึงทำงานได้รวดเร็วและมีขนาดเล็ก ทำให้เหมาะสำหรับเว็บแอปพลิเคชัน PHP
หมายเหตุ: เอกสาร XML ต้องมีรูปแบบที่ดี มิฉะนั้น Expat จะทำให้เกิดข้อผิดพลาด
ฟังก์ชันตัวแยกวิเคราะห์ XML Expat เป็นส่วนสำคัญของแกน PHP ไม่จำเป็นต้องติดตั้งเพื่อใช้ฟังก์ชันเหล่านี้
ไฟล์ XML ต่อไปนี้จะถูกใช้ในตัวอย่างของเรา:
<?xml version="1.0" encoding="ISO-8859-1"?><note><to>Tove</to><from>Jani</from><heading>Reminder</heading><body>Don สุดสัปดาห์นี้อย่าลืมฉัน!</body></note>
เราจำเป็นต้องเริ่มต้นตัวแยกวิเคราะห์ XML ใน PHP กำหนดตัวจัดการสำหรับเหตุการณ์ XML ที่แตกต่างกัน จากนั้นแยกวิเคราะห์ไฟล์ XML
<?php//เริ่มต้น XML parser$parser=xml_parser_create();//ฟังก์ชั่นที่จะใช้ที่จุดเริ่มต้นของ elementfunction start($parser,$element_name,$element_attrs) { switch($element_name) { case "NOTE": echo "-- หมายเหตุ --<br>"; case "TO": echo "To: "; "HEADING": echo "Heading: "; break; case "BODY": echo "ข้อความ: "; "; }//ฟังก์ชันสำหรับค้นหาอักขระ datafunction char($parser,$data) { echo $data; }//ระบุองค์ประกอบ handlerxml_set_element_handler($parser,"start", "stop");//ระบุข้อมูล handlerxml_set_Character_data_handler($parser,"char");//เปิดไฟล์ XML$fp=fopen("test.xml","r");/ /อ่านข้อมูลในขณะ ($data=fread($fp,4096)) { xml_parse($parser,$data,feof($fp)) or die (sprintf("ข้อผิดพลาด XML: %s ที่บรรทัด %d", xml_error_string(xml_get_error_code($parser)), xml_get_current_line_number($parser))); }/ /ปล่อย XML parserxml_parser_free($parser);?>
รหัสข้างต้นจะส่งออก:
-- หมายเหตุ --ถึง: ToveFrom: JaniHeading: ReminderMessage: อย่าลืมฉันสุดสัปดาห์นี้!
มันทำงานอย่างไร:
เตรียมใช้งานตัวแยกวิเคราะห์ XML ผ่านฟังก์ชัน xml_parser_create()
สร้างฟังก์ชันที่ทำงานร่วมกับตัวจัดการเหตุการณ์ที่แตกต่างกัน
เพิ่มฟังก์ชัน xml_set_element_handler() เพื่อกำหนดฟังก์ชันที่จะดำเนินการเมื่อ parser พบแท็กเปิดและปิด
เพิ่มฟังก์ชัน xml_set_Character_data_handler() เพื่อกำหนดฟังก์ชันที่จะดำเนินการเมื่อ parser พบข้อมูลอักขระ
แยกไฟล์ "test.xml" ผ่านฟังก์ชัน xml_parse()
ในกรณีที่เกิดข้อผิดพลาด ให้เพิ่มฟังก์ชัน xml_error_string() เพื่อแปลงข้อผิดพลาด XML เป็นคำอธิบายข้อความ
เรียกใช้ฟังก์ชัน xml_parser_free() เพื่อปล่อยหน่วยความจำที่จัดสรรให้กับฟังก์ชัน xml_parser_create()
หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับฟังก์ชัน PHP Expat โปรดไปที่คู่มืออ้างอิง PHP XML Parser ของเรา