Facebook Article  บทความ Facebook   C++ Article  บทความ C , C++   Android Article  บทความ Android   PHP SQL Article  บทความ PHP   Games Article  บทความ Games  

filezilla Article  บทความ Filezilla 

Youtube icon  Video 

ตัวอย่าง Parsere XML ด้วย PHP #2

Posted by Pongpat Janthai on พฤษภาคม 24, 2011 – 3:52 pm

ตัวอย่าง Parsere XML ด้วย PHP #2

ตัวอย่างการParse XMl ด้วย PHP

ตัวอย่างการParse XMl ด้วย PHP

หลังจากตอนที่หนึ่งที่เราได้ทำการแปลงเอกสาร XML ด้วย PHP ไปแล้ว สามารถนำไปแสดงผลได้ ต่อจากนี้ถ้าเราต้องการนำไปใช้ประโยชน์อย่างอื่นหละจะทำยังไงดี ในตัวอย่างนี้ผมจะเอาตัวอย่างการบันทึกเป็นไฟล์ XML ไฟล์ใหม่มาเป็นตัวอย่าง เรื่องของเรื่องก็คือเราจะแปลงจากฟอร์แมต XML ซึ่งบางทีมันส่งมาไม่ตรงกับการใช้งานของเรา เราก็อาจจะนำมาแปลงดึงเอาเฉพาะข้อมู,ที่เราต้องการพร้อมกับแปลงใหม่ เพื่อให้มันใช้งานได้นั่นเอง และนี่แหละเขาถึงได้พูดถึง XML ว่ามันเป็นภาษาที่สามารถออกแบบแท็กได้เอง ขอให้ระหว่างผู้รับและผู้ส่งข้อมูลเข้าใจโครงสร้างของกันและกันได้ก็พอ XML จึงเป็นภาษาที่มันสามารถติดต่อระหว่างโปรแกรมที่อยู่คนละแฟลตฟอร์มได้นั่นเอง
พูดซะยืดยาวเรามาดูตัวอย่างการแปลงเอ็กเอ็มแอลกันเลยครับ
ขั้นตอนการทำงานจะเป็นดังนี้นะครับ คือเริ่มจากการอ่านเอ็กเอ็มแอลเข้ามา –> ดึงเอาเฉพาะส่วนที่เราต้องการ –> บันทึกไฟล์เอ็กเอ็มแอล
โดยทั้งหมดนี้จะอาศัย Domdocument ซึ่งเป็นไลบรารีหนึ่งที่มีให้ใช้ใน PHP อยู่แล้วซึ่งหาได้ในเว็บของ PHP แต่อาจจะมาศึกษาได้จากตัวอย่างโค้ดนี้ก็ได้เช่นกัน จะไม่ขอพูดถึงรายละเอียดของ Domdocument นะครับ เอาง่ายๆก็คือมันสามารถใช้อ่านโครงสร้างของ XML ได้นั่นแหละ
จากตัวอย่างการสร้าง Domdocument โดยใช้ PHP เราสารถมารถประกาศและเรียกใช้ดังนี้ครับ

สร้างตัวแปร $dom เป็นชนิด domducument มาเพื่อใช้งาน
<?php
$dom = new domDocument;
/*
Load เอ็กเอ็มแอลเข้ามาเก็บไว้ในตัวแปร $dom ในที่นี้สามารถใส่เป็น URL ได้เช่นกัน
และ file ที่โหลดเข้ามาต้องเป็นเอ็กเอ็มแอลเท่านั้นจึงจะสามารถโหลดได้นะครับ ไม่เช่นนั้นแล้วจะเกิด Error ขึ้นทันที
เพราะ domDocument เราไม่รองรับนั่นเอง
*/
$dom->load('filename.xml');
/*
เมื่อโหลดเข้ามาเก็บไว้ในตัวแปรแล้วต่อไปจะสร้างตัวแปรชื่อ $s เพื่อ import xml แบบง่ายๆ ในที่นี้ใช้ simplexml_import_dom
*/
$s = simplexml_import_dom($dom);
/*
และก็ต่อมาจะสร้างตัวแปรที่เป็น domDocument อีกตัวหนึ่งเพื่อเอาไว้เก็บข้อมูล XMl หลังจากที่เราแปลงแล้วนั้นเอง ตั้งตัวแปร ชื่อ $saveXML ละกัน
*/
$saveXML = new domDocument;
/*ให้ย้อนกลับไปดูตอนที่แล้วนิดนึงนะครับ เพราะว่าผมจะใช้ Rss เป็นฟอร์แมตมาตรฐานในการใช้เป็นตัวอย่าง และในตัวอย่างนี้ สมมติว่าเราต้องการแปลง XML ให้อยู่ในรูป
<?xml version="1.0"?>
<?items?>
<?item?>item1?<?/item?>
<?item?>item2?<?/item?>
<?item?>item3?<?/item?>
<?/items?>
<?/xml?>
ดังนั้นจึงจำเป็นต้องสร้างโหนด items ขึ้นมาให้กับ $saveXML ก่อน
*/
$items = $saveXML->appendChild($saveXML->createElement('items'));
/*
และทีนี้เราก็จะมาวนลูปเพื่อดึงเอาค่าจากไฟล์ XML ที่เราดึงมา แล้วเอาไปเก็บในไฟล์ใหม่
*/
$i=0;
while($s->channel[0]->item[$i]->title) {
//สร้าElementใหม่ขึ้นมา ในที่นี้คือการสร้าง Element "title" ไว้ข้างใน item
$item = $items->appendChild($saveXML->createElement('item'));
$title = $item->appendChild($saveXML->createElement('title'));
//ดึงข้อมูลแล้วเพิ่มเข้าไปในตัวแปรใหม่ที่เราตั้งขึ้น
$title->appendChild( $saveXML->createTextNode($s->channel[0]->item[$i]->title));
//สร้าง Element link พร้อมกับดึงค่าเข้าไปเก็บ
$link = $item->appendChild($saveXML->createElement('link'));
$link->appendChild( $saveXML->createTextNode($s->channel[0]->item[$i]->link));
//สร้าง Element author พร้อมกับดึงค่าเข้าไปเก็บ
$author = $item->appendChild($saveXML->createElement('author'));
$author->appendChild( $saveXML->createTextNode($s->channel[0]->item[$i]->author));
$i++;
}
/*
หลังจากที่เราวนลูปอ่านค่าพร้อมทั้งเพิ่มเข้าไปในตัวแปร $saveXML แล้ว ทีนี้ก็จะเป็นขึ้นตอนการบันทึกลงไฟล์
ก่อนอื่นก็ต้อง Formate ก่อนเพื่อให้โค้ดที่ออกมานั้นสวยงาม
*/
$saveXML->formatOutput = true;
$saveXML->save('Summary.xml');
//เป็นอันเสร็จพีธี แค่นี้เราก็สามารถดึงค่าที่เราต้องการออกมาจากไฟล์เอ็กเอ็มแอลเดิมได้แล้วหละ
//อาจจะเอาไปประยุกต์เป็นอย่างอื่นก็ได้เช่นการบันทึกลงฐานข้อมูลเดี๋ยวจะนำเสนอในบทความต่อๆไปน๊ะ

สรุปไฟล์แบบไม่มีคอมเม้น เพื่อให้อ่านได้ง่ายๆก็ดังนี้เลยครับ

<?php
$dom = new domDocument;
$dom->load('filename.xml');
$s = simplexml_import_dom($dom);
$saveXML = new domDocument;
$items = $saveXML->appendChild($saveXML->createElement('items'));
$i=0;
while($s->channel[0]->item[$i]->title) {
$item = $items->appendChild($saveXML->createElement('item'));
$title = $item->appendChild($saveXML->createElement('title'));
$title->appendChild( $saveXML->createTextNode($s->channel[0]->item[$i]->title));
$link = $item->appendChild($saveXML->createElement('link'));
$link->appendChild( $saveXML->createTextNode($s->channel[0]->item[$i]->link));
$author = $item->appendChild($saveXML->createElement('author'));
$author->appendChild( $saveXML->createTextNode($s->channel[0]->item[$i]->author));
$i++;
}
$saveXML->formatOutput = true;
$saveXML->save('Summary.xml');


2 Responds so far- Add one»

  1. 1. aun Said:

    พี่ครับ มันมีวิธีดึง xml to array ไหมครับ
    พอดีเขียนดึงข้อมูลจาก xml ไม่เป็นอะครับ

  2. 2. jan Said:

    ขอบคุณมากนะค่ะ ช่วยได้มากกกเลยยจริงๆ
    ตอนนี้กำลัง เอามาปั่นอยู่เอามาแก้ให้มันสวยงามขึ้น
    ปวดหัวมากค่ะ 5555

แสดงความคิดเห็น (กรุณาใส่ ชื่อ,อีเมล ให้ถูกต้อง)

*

*



เรื่องอื่นๆที่น่าสนใจ

facebook เข้าไม่ได้
facebook เข้าไม่ได้ แก้ไขได้ง่ายๆ ภาค 3

กล้องถ่ายรูปสำหรับถ่ายภาพสินค้าสำหรับร้านค้าออนไลน์

คุณรู้มั๊ยว่าGoogleทำอะไรได้บ้าง?

About

Pongpat Janthaiพงษ์พัฒน์ จันทร์ไทย
COE#18 วิศวกรรมคอมพิวเตอร์ มหาวิทยาลัยขอนแก่น
"มุมเล็กๆ ของเด็กวิศวะฯ"

Tabs Switcher

  • Latest Posts
  • Popular Posts
  • Random Posts

คลังเก็บ

Archives

Meta