GORAGOD.com

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

การ parse XML ด้วยฟังก์ชั่นของ PHP ครับ ซึ่งวิธีการก็ไม่ได้ยากอะไร แต่ว่าเอกสาร XML ที่ได้นี่ต้องถูกต้องตามมาตรฐานครับ มันถึงจะอ่านได้อย่างไม่มี error (ซึ่งตามข้อกำหนดแล้ว XML ต้องมีโครงสร้างภาษาที่ถูกต้อง 100% อยู่แล้ว)
<?xml version="1.0" encoding="UTF-8"?>
<BOOK>
    <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>
</BOOK>

ด้านบนเป็นเอกสาร XML ที่สมบูรณ์ครับ ด้านล่างจะเป็นตัวอย่างการอ่านค่าครับ โดยการใช้ ฟังก์ชั่นในกลุ่ม xml_parser ของ PHP ลองหาอ่านคำสั่งอื่นๆได้จาก manual ของ PHP นะครับ

<?php
     $parser = xml_parser_create();
     function display( $parser, $data ) {
         echo $data; // แสดงผล
     }

    xml_set_character_data_handler( $parser, "display" ); // กำหนดฟังก์ชั่นเพื่อรับค่าของ XML มาจัดการ

    $fp = fopen( "address.xml", "r" ); // เปิดไฟล์ XML

    // วนลูปอ่านทีละ 4096  byte
    while ( $data = fread( $fp, 4096 ) ) {
          xml_parse( $parser, $data, feof( $fp ) ) OR
              die ( sprintf("XML Error: %s at line %d", xml_error_string(xml_get_error_code( $parser ) ), xml_get_current_line_number( $parser ) ) );
     }

     xml_parser_free( $parser ); // คืนหน่วยความจำ
?>

อ้อ ทั้ง 3 บทความเกี่ยวกับการ parse XML เนี่ยไม่มีปัญหากับภาษาไทยนะครับ ไม่ว่าจะเป็น TIS-620 หรือ UTF-8 เพียงแต่ต้องกำหนด header ของเอกสารให้ถูกต้องเท่านั้น