การแยกข้อความ XML ด้วย PHP
การ parse เอกสาร XML โดยเฉพาะในเอกสาร ที่รู้ node ของ XML ที่แน่นอนนั้น เราอาจใช้ฟังก์ชั่นในกลุ่ม preg เพื่อแยกข้อมูลได้ครับ
ตัวอย่างเอกสาร XML ผม save ไว้ในชื่อ address.xml ครับ
<ADDRESS>
<NAME>Goragod Wiriya</NAME>
<COMPANY>Goragod.com</COMPANY>
<GENDER>male</GENDER>
<EMAIL>goragod@yahoo.com</EMAIL>
</ADDRESS>
การอ่านเอกสารด้านบน สามารถทำได้ง่ายๆ ดังนี้ครับ
<?php
$xml = file_get_contents( 'address.xml' ); // อ่านไฟล์ XML
preg_match('/<NAME>(.*?)<\/NAME>/isu',$xml,$name); // อ่าน NAME
echo '<br />name:: '.$name[1];
preg_match('/<COMPANY>(.*?)<\/COMPANY>/isu',$xml,$company); // อ่าน COMPANY
echo '<br />company :: '.$company[1];
preg_match('/<EMAIL>(.*?)<\/EMAIL>/isu',$xml,$email); // อ่าน EMAIL
echo '<br />email :: '.$email[1];
?>
ปกติแล้วถ้าหากว่าเอกสาร XML ที่จะอ่านมี NODE ที่แน่นอน ก็สามารถอ่านได้ง่ายๆตามวิธีด้านบนครับ แต่หากเอกสาร XML มีความซับซ้อนมากขึ้น เช่น อาจมี prpoerty ก็อาจต้อมากำหนด pattern ที่เหมาะสมให้กับ preg_match เพื่ออ่านค่าออกมาครับ เช่น
หากมี node ในรูปแบบ
<NAME type="sername">Goragod Wiriya</NAME>
เราก็อาจจัด pattern ได้ว่า
<?php
preg_match('/<NAME.*?>(.*?)<\/NAME>/isu' , '<NAME type="sername">Goragod Wiriya</NAME>', $match);
echo '<br />name :: '.$match[1];
?>