การแยกข้อความ XML ด้วย PHP ตอนที่ 2

บทความก่อนหน้า จะเป็นการอ่าน XML ด้วย PHP ที่มีเพียง node เดียว แต่ในกรณีที่เอกสาร XML นั้นมีหลาย node เช่น RSS ทีี่อาจมีหลายข่าว การ parse XML ด้วย PHP ก็สามารถทำได้ง่ายๆ ด้วยการเปลี่ยนจาก การใช้ preg_match เป็น preg_match_all

ตัวอย่าง XML ที่มี address ถึง 2 รายชื่อครับ

<ADDRESS>
    <NAME>Goragod Wiriya</NAME>
    <COMPANY>Goragod.com</COMPANY>
    <GENDER>male</GENDER>
    <EMAIL>goragod@yahoo.com</EMAIL>
</ADDRESS>
<ADDRESS>
    <NAME>สวัสดี ประเทศไทย</NAME>
    <COMPANY>Google</COMPANY>
    <GENDER>female</GENDER>
    <EMAIL>info@gmail.com</EMAIL>
</ADDRESS>

การอ่านก็แค่เปลี่ยนจาก preg_match เป็น preg_match_all ครับ

<?php
     $xml = file_get_contents( 'address.xml' ); // อ่านไฟล์ XML
     preg_match_all('/<NAME>(.*?)<\/NAME>/isu',$xml,$name); // อ่าน NAME
     // print_r($name);
     echo '<br />name 1 :: '.$name[1][0];
     echo '<br />name 2 :: '.$name[1][1];
     preg_match_all('/<COMPANY>(.*?)<\/COMPANY>/isu',$xml,$company); // อ่าน COMPANY
     echo '<br />company 1 :: '.$company[1][0];
     echo '<br />company 2 :: '.$company[1][1];
     preg_match_all('/<EMAIL>(.*?)<\/EMAIL>/isu',$xml,$email); // อ่าน EMAIL
     echo '<br />email 1 :: '.$email[1][0];
     echo '<br />email 2 :: '.$email[1][1];
?>

สำหรับผลลัพท์ของ preg_match_all ที่ได้จะอยู่ในรูปที่แตกต่างจาก preg_match นะครับ สามารถทดสอบได้โดยการใช้ print_r() แสดงผลลัพท์ให้ดู

สำหรับตัวอย่างอื่นๆของการ parse XML สามารถดูได้จากโค้ดแสดงข่าว RSS ครับ ซึ่ง RSS ก็คือรูปแบบหนึ่งของ XML ครับ
ผู้เขียน goragod โพสต์เมื่อ 19 ก.พ. 2552 เปิดดู 11,700 ป้ายกำกับ XMLPHP
^