การแยกข้อความ XML ด้วย PHP
      
      
      จริงๆแล้วการ parse XML ด้วย PHP มีฟังก์ชั่นของ PHP ให้เลือกใช้ได้อยู่แล้วโดยไม่ต้องไปหาฟังก์ชั่นอื่น แต่ผมไม่ได้เลือกใช้ฟังก์ชั่นของ PHP ในการทำงานหรอกครับ เนื่องจากผมพบว่าบ่อยครั้งที่บาง Server ไม่ได้เปิดใช้ฟังก์ชั่นในกลุ่มนี้ไว้ หากใครสนใจลองไปดูได้ที่ http://th2.php.net/...nual/en/book.xml.php ครับ
การ parse เอกสาร XML โดยเฉพาะในเอกสาร ที่รู้ node ของ XML ที่แน่นอนนั้น เราอาจใช้ฟังก์ชั่นในกลุ่ม preg เพื่อแยกข้อมูลได้ครับ
ตัวอย่างเอกสาร XML ผม save ไว้ในชื่อ address.xml ครับ
การอ่านเอกสารด้านบน สามารถทำได้ง่ายๆ ดังนี้ครับ
ปกติแล้วถ้าหากว่าเอกสาร XML ที่จะอ่านมี NODE ที่แน่นอน ก็สามารถอ่านได้ง่ายๆตามวิธีด้านบนครับ แต่หากเอกสาร XML มีความซับซ้อนมากขึ้น เช่น อาจมี prpoerty ก็อาจต้อมากำหนด pattern ที่เหมาะสมให้กับ preg_match เพื่ออ่านค่าออกมาครับ เช่น
หากมี node ในรูปแบบ
เราก็อาจจัด pattern ได้ว่า
    การ 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];
?>