บทช่วยสอน PHP XML: สร้าง แยกวิเคราะห์ อ่านพร้อมตัวอย่าง

⚡ สรุปอย่างชาญฉลาด

PHP และ XML ทำงานร่วมกันเพื่อจัดโครงสร้าง จัดเก็บ และแลกเปลี่ยนข้อมูลระหว่างระบบ คู่มือนี้จะอธิบาย XML, DOM และตัวแยกวิเคราะห์ XML จากนั้นจะแสดงวิธีการอ่านเอกสาร XML ด้วย SimpleXML และวิธีการสร้างเอกสาร XML ด้วยคลาส DOMDocument โดยจะจบลงด้วยวิธีการใช้งานแต่ละอย่างในสถานการณ์ต่างๆ

  • 📄 XML คืออะไร: XML ย่อมาจาก Extensible Markup Language ซึ่งเป็นรูปแบบที่ใช้แท็กในการกำหนดโครงสร้างและส่งต่อข้อมูล
  • 🌳 DOM: โมเดลอ็อบเจ็กต์เอกสาร (Document Object Model) มองเอกสาร XML หรือ HTML ในรูปแบบโครงสร้างต้นไม้ ดังนั้นโค้ดจึงสามารถนำทางและแก้ไขโหนดต่างๆ ได้
  • 🔄 ตัวแยกวิเคราะห์ XML: ตัวแยกวิเคราะห์จะแปลงเอกสาร XML ให้เป็นอ็อบเจ็กต์ DOM ซึ่ง PHP สามารถใช้งานได้ Javaสคริปต์หรือ Python สามารถอ่านและแก้ไขได้
  • ???? การอ่าน XML: simplexml_load_file โหลดไฟล์ลงในอ็อบเจ็กต์ ดังนั้นคุณจึงสามารถเข้าถึงเรคอร์ดได้ด้วยไวยากรณ์ลูกศร เช่น $xml->record->name
  • 🛠️ การสร้าง XML: คลาส DOMDocument สร้างโหนดเอกสารทีละโหนดด้วยเมธอด createElement และ appendChild จากนั้นจึงบันทึกไฟล์
  • 🇧🇷 SimpleXML เทียบกับ DOM: SimpleXML อ่านได้รวดเร็ว ในขณะที่ DOMDocument เหมาะสำหรับการสร้างที่แม่นยำและการจัดการที่ซับซ้อน
  • 🤖 AI ช่วยเหลือ: เครื่องมือ AI สามารถสร้างโค้ดสำหรับการแยกวิเคราะห์โครงสร้าง XML เฉพาะ และแปลงระหว่าง XML, JSON และอาร์เรย์ PHP ได้

พีพีและอีเอ็มแอล

XML คืออะไร?

XML เป็นตัวย่อสำหรับ Extensible Markup Language

XML ใช้สำหรับจัดโครงสร้าง จัดเก็บ และส่งต่อข้อมูลจากระบบหนึ่งไปยังอีกระบบหนึ่ง

XML มีลักษณะคล้ายกับ HTML โดยใช้แท็กเปิดและแท็กปิด แต่ต่างจาก HTML ตรงที่ XML อนุญาตให้ผู้ใช้กำหนดแท็กของตนเองได้

DOM คืออะไร?

DOM เป็นตัวย่อสำหรับ Document Object Model

เป็นมาตรฐานที่ใช้งานได้บนหลายแพลตฟอร์มและไม่ขึ้นกับภาษา ซึ่งกำหนดวิธีการเข้าถึงและจัดการข้อมูลใน:

  • HTML
  • XHTML
  • XML

DOM XML ใช้เพื่อเข้าถึงและจัดการเอกสาร XML มัน ดูเอกสาร XML ในลักษณะโครงสร้างแบบต้นไม้

ตัวแยกวิเคราะห์ XML

โปรแกรมแยกวิเคราะห์ XML คือโปรแกรมที่แปลงเอกสาร XML ให้เป็นอ็อบเจ็กต์ XML Document Object Model (DOM)

จากนั้นจึงสามารถจัดการออบเจ็กต์ XML DOM ได้โดยใช้ Javaสคริปต์ PythonPHP และภาษาอื่นๆ

คำสำคัญ CDATA ซึ่งเป็นคำย่อของ (unparsed) Character Data ใช้เพื่อละเว้นอักขระพิเศษ เช่น “<” และ “>” เมื่อทำการแยกวิเคราะห์เอกสาร XML

เหตุใดจึงต้องใช้ XML

  • เว็บเซอร์วิส เช่น SOAP และ REST ใช้รูปแบบ XML ในการแลกเปลี่ยนข้อมูล การเรียนรู้ว่า XML คืออะไรและทำงานอย่างไร จะทำให้คุณได้เปรียบในการแข่งขันในฐานะนักพัฒนา เนื่องจากแอปพลิเคชันสมัยใหม่ใช้บริการเว็บอย่างมาก
  • เอกสาร XML สามารถใช้เพื่อจัดเก็บการตั้งค่าต่างๆ ของแอปพลิเคชันได้
  • มันช่วยให้คุณสร้างแท็กแบบกำหนดเองได้ ซึ่งทำให้มีความยืดหยุ่นมากขึ้น

ตัวอย่างเอกสาร XML

สมมติว่าคุณกำลังพัฒนา...ping แอปพลิเคชันที่ดึงข้อมูลจากเว็บเซอร์วิสในรูปแบบ XML

ด้านล่างนี้คือตัวอย่างลักษณะของเอกสาร XML

<?xml version="1.0" encoding="utf-8"?>
<employees status = "ok">
<record man_no = "101">
<name>Joe Paul</name>
<position>CEO</position>
</record>
<record man_no = "102">
<name>Tasha Smith</name>
<position>Finance Manager</position>
</record>
</employees>

ที่นี่

  • “ “ระบุเวอร์ชัน XML และการเข้ารหัสที่จะใช้”
  • - ” คือองค์ประกอบราก
  • “ … "คือองค์ประกอบย่อย โดยมีหนึ่งรายการต่อบันทึกข้อมูลพนักงานหนึ่งคน"

วิธีอ่าน XML โดยใช้ PHP

ต่อไปนี้เราจะเขียนโค้ดที่จะอ่านเอกสาร XML ของพนักงานและแสดงผลลัพธ์ในเว็บเบราว์เซอร์ index.php

<?php
$xml = simplexml_load_file('employees.xml');
echo '<h2>Employees Listing</h2>';
$list = $xml->record;
for ($i = 0; $i < count($list); $i++) {
echo '<b>Man no:</b> ' . $list[$i]->attributes()->man_no . '<br>';
echo 'Name: ' . $list[$i]->name . '<br>';
echo 'Position: ' . $list[$i]->position . '<br><br>';
}
?>

ที่นี่

  • คำสั่ง “$xml = simplexml_load_file('employees.xml');” ใช้ฟังก์ชัน simplexml_load_file เพื่อโหลดไฟล์ชื่อ employees.xml และกำหนดเนื้อหาให้กับตัวแปร $xml
  • “$list = $xml->record;” จะดึงเนื้อหาของโหนดเรคอร์ดออกมา
  • “for ($i = 0; $i < count(…)…” คือลูป for ที่อ่านอาร์เรย์และแสดงผลลัพธ์ออกมา
  • “$list[$i]->แอตทริบิวต์()->man_no;” อ่านแอตทริบิวต์ man_no ขององค์ประกอบ
  • “$รายการ[$i]->ชื่อ;” อ่านค่าขององค์ประกอบชื่อลูก
  • “$รายการ[$i]->ตำแหน่ง;” อ่านค่าขององค์ประกอบตำแหน่งลูก

การทดสอบตัวอ่าน XML

สมมติว่าคุณบันทึกไฟล์ index.php ไว้ในโฟลเดอร์ phptuts/xml แล้ว ให้เข้าไปที่โฟลเดอร์นั้น URL http://localhost/phptuts/xml/index.php

อ่าน XML โดยใช้ PHP

วิธีสร้างเอกสาร XML โดยใช้ PHP

ตอนนี้เราจะดูวิธีการสร้างเอกสาร XML โดยใช้ PHP

โค้ดต่อไปนี้ใช้คลาส DOMDocument ที่มีอยู่ใน PHP เพื่อสร้างเอกสาร XML

<?php

$dom = new DOMDocument();

$dom->encoding = 'utf-8';

$dom->xmlVersion = '1.0';

$dom->formatOutput = true;

$xml_file_name = 'movies_list.xml';

$root = $dom->createElement('Movies');

$movie_node = $dom->createElement('movie');

$attr_movie_id = new DOMAttr('movie_id', '5467');

$movie_node->setAttributeNode($attr_movie_id);

$child_node_title = $dom->createElement('Title', 'The Campaign');

$movie_node->appendChild($child_node_title);

$child_node_year = $dom->createElement('Year', 2012);

$movie_node->appendChild($child_node_year);

$child_node_genre = $dom->createElement('Genre', 'Comedy');

$movie_node->appendChild($child_node_genre);

$child_node_ratings = $dom->createElement('Ratings', 6.2);

$movie_node->appendChild($child_node_ratings);

$root->appendChild($movie_node);

$dom->appendChild($root);

$dom->save($xml_file_name);

echo "$xml_file_name has been successfully created";
?>

ที่นี่

  • “$dom = new DOMDocument();” สร้างอินสแตนซ์ของคลาส DOMDocument
  • “$dom->การเข้ารหัส = 'utf-8';” ตั้งค่าการเข้ารหัสเอกสารเป็น utf-8
  • “$dom->xmlVersion = '1.0';” ระบุหมายเลขเวอร์ชัน 1.0
  • “$dom->formatOutput = จริง;” ช่วยให้มั่นใจได้ว่าเอาต์พุตมีรูปแบบที่ดี
  • “$root = $dom->createElement('ภาพยนตร์');” สร้างโหนดรูทชื่อภาพยนตร์
  • “$attr_movie_id = new DOMAttr('movie_id', '5467');” กำหนดแอตทริบิวต์ movie_id ของโหนดภาพยนตร์
  • คำสั่ง “$dom->createElement('ElementName', 'ElementValue')” สร้างโหนดลูก โดย ElementName ระบุชื่อขององค์ประกอบ เช่น Title และ ElementValue กำหนดค่าให้กับโหนดลูก เช่น The Campaign
  • “$root->appendChild($movie_node);” จะเพิ่มโหนดภาพยนตร์เข้าไปในโหนดราก Movies
  • “$dom->ผนวกเด็ก($root);” ผนวกโหนดรูทเข้ากับเอกสาร XML
  • “$dom->save($xml_file_name);” บันทึกไฟล์ XML ในไดเรกทอรีรากของเว็บเซิร์ฟเวอร์
  • คำสั่ง “echo “$xml_file_name has been successfully created”;” จะแสดงข้อความแสดงความสำเร็จ

การทดสอบ XML Creator

สมมติว่าคุณบันทึกไฟล์ create_movies_list.php ไว้ในโฟลเดอร์ phptuts/xml แล้ว ให้เข้าไปที่โฟลเดอร์นั้น URL http://localhost/phptuts/xml/create_movies_list.php

สร้างเอกสาร XML โดยใช้ PHP

เปิดไฟล์ movies_list.xml

สร้างเอกสาร XML โดยใช้ PHP

SimpleXML เทียบกับ DOMDocument

PHP มีวิธีการหลักสองวิธีในการทำงานกับ XML SimpleXML เหมาะที่สุดเมื่อคุณต้องการอ่านข้อมูลเป็นหลัก ในขณะที่ DOMDocument ให้การควบคุมที่ละเอียดกว่าสำหรับการสร้างและแก้ไขเอกสารอย่างมาก ตารางด้านล่างนี้เปรียบเทียบทั้งสองวิธี

แง่มุม SimpleXML DOMDocument
ความง่ายดายในการใช้งาน ง่ายมากครับ เอกสารนี้ทำงานเหมือนกับวัตถุที่ซ้อนกันอยู่ API ที่มีรายละเอียดมากขึ้นและใช้โหนดเป็นหลัก
เหมาะสำหรับ การอ่านและการแก้ไขเบื้องต้น การสร้างเอกสารและการจัดการข้อมูลที่ซับซ้อน
รูปแบบการเข้าถึง $xml->บันทึก->ชื่อ createElement() และ appendChild()
รองรับ XPath ใช่ ผ่านทาง ->xpath() ใช่ ผ่านคลาส DOMXPath

หลักการใช้งานที่เหมาะสมคือ ควรเลือกใช้ SimpleXML ก่อนสำหรับการอ่านฟีดและไฟล์ที่ไม่ซับซ้อน และเปลี่ยนไปใช้ DOMDocument เมื่อต้องการสร้างเอกสาร แทรกโหนดในตำแหน่งที่กำหนด หรือตรวจสอบความถูกต้องตามสคีมา

คำถามที่พบบ่อย

ทั้งสองรูปแบบใช้จัดเก็บข้อมูลที่มีโครงสร้าง แต่ XML ใช้แท็กและรองรับแอตทริบิวต์ ความคิดเห็น และสคีมา ในขณะที่ JSON มีขนาดเล็กกว่าและแปลงเป็นอาร์เรย์และออบเจ็กต์โดยตรง JSON นิยมใช้ใน API ส่วน XML เหมาะสำหรับเอกสารและการตั้งค่า

โหลดไฟล์ด้วย SimpleXML หรือ DOMDocument เปลี่ยนค่าหรือแอตทริบิวต์ของโหนด จากนั้นเขียนกลับเข้าไปใหม่ สำหรับ SimpleXML ให้แก้ไขคุณสมบัติแล้วเรียก asXML('file.xml'); สำหรับ DOMDocument ให้แก้ไขโหนดแล้วเรียก save()

XPath เป็นภาษาสำหรับการค้นหาโหนดในเอกสาร XML ใน PHP สามารถเรียกใช้ `$xml->xpath('//record/name')` ด้วย SimpleXML หรือใช้คลาส DOMXPath เพื่อดึงองค์ประกอบที่ตรงกันโดยไม่ต้องค้นหาping ตลอดทั้งต้น

ใช่แล้ว AI สามารถสร้างโค้ดโดยใช้ simplexml_load_string, json_encode และ json_decode เพื่อแปลงระหว่างรูปแบบต่างๆ และระบุข้อมูลที่ไม่สามารถแปลงได้อย่างสมบูรณ์ เช่น แอตทริบิวต์ XML หรือเนื้อหาผสม ตรวจสอบผลลัพธ์ได้เลย

ใช่แล้ว เพียงวางตัวอย่าง XML ของคุณลงไป AI ก็จะสร้างโค้ด SimpleXML หรือ DOMDocument ที่อ่านองค์ประกอบและแอตทริบิวต์ที่คุณต้องการได้อย่างแม่นยำ รวมถึงลูปสำหรับระเบียนที่ซ้ำกัน ทดสอบกับไฟล์จริงได้เลย

สรุปโพสต์นี้ด้วย: