มาอ่าน XML แบบง่ายๆ ด้วย SimpleXML

จำได้มั้ยครับ สมัยก่อนเวลาเราจะอ่าน xml โดยใช้ php ที ต้องไปใช้คำสั่งตระกูล xml_parser ที่แสนวุ่นวาย มาจน PHP5 เพิ่มคำสั่ง simplexml มา และแล้วทุกอย่างก็เปลี่ยนไปตลอดกาล….

คำสั่ง simplexml เป็น extension ที่เริ่มมีมาใน PHP5 นี้เอง ชุดคำสั่งสามารถช่วยเราจัดการ xml ได้อย่างสบายมือ หยั่งกะท่อง array ^^ วันนี้ผมจะมา อธิบายแค่ชุดคำสั่งที่ใช้ในการ read เท่านั้นก่อน จะได้ไม่เป็นการยากเกินไป

เอาละเบื้องต้นหา xml เป้าหมายกันก่อน เอาเป็น hi5 นี่ล่ะว้า คนเล่นเยอะดี

  1. <?php
  2. $url = "http://api.hi5.com/rest/feed/albumlist/106835745";
  3. $xmlBase = file_get_contents($url);
  4. // SimpleXML ไม่ชอบ xml ในรูปแบบ <atom:field> เราจึง replace มันออกไปก่อน
  5. $xmlstr = preg_replace("/(<\/?)(\w+):([^>]*>)/", "$1$2$3", $xmlBase);
  6.  
  7. // วนลูปโดยทำการชี้ ไปที่ชุดที่เราต้องการได้เลย
  8. foreach ($xml->atomentry as $item)
  9. {
  10.   // ทำการดึง content ออกมา
  11.   echo $item->atomcontent."
  12. ";
  13. }
  14. ?>

เพียงเท่านี้ครับ ง่ายมั้ยล่ะ นอกจากนี้ simplexml ยังมีของวิเศษอีกชิ้นนึง นั่นก็คือ xpath ครับ

xpath เป็นตัวที่ทำให้เราข้ามชุดข้อมูลที่เราไม่ต้องการได้ทันทีเลย

เช่นผมมี xml ตามแบบด้านล้างนี้

  1. <?php
  2. $string = <<<XML
  3. <a>
  4.  <b>
  5.   <c>text</c>
  6.   <c>stuff</c>
  7.  </b>
  8.  <d>
  9.   <c>code</c>
  10.  </d>
  11. </a>
  12. XML;
  13. ?>

ผมสามารถที่จะเข้าถึง ข้อมูลชุด c ได้เลย โดยเขียนแบบนี้

  1. $xml = new SimpleXMLElement($string);
  2. $result = $xml->xpath(‘b/c’);

หรือขี้เกียจหนักเลยผมจะใช้แบบนี้ก็ยังได้

  1. $result = $xml->xpath(‘//c’);

ไม่ต้องเสียเวลามาไล่ทีละชั้นเหมือน array

นอกจากนี้ยังมีคำสั่งที่ต้องศึกษาเพิ่มเติมกันเอาอีกนิดหน่อยครับ คือพวกนี้

SimpleXMLElement->asXML
SimpleXMLElement->attributes
SimpleXMLElement->children

ปล. ตัวอย่างที่ผมเขียนให้ถ้าเอาไปศึกษาดีๆ สามารถดูรูปคนที่เค้าตั้งไว้ไม่ให้ดูด้วยนะ อิอิ ^^

แบบนี้ไงล่ะ
http://xxx.jquerytips.com/SimpleXML/readATOM.php?userId=xxxxxx

ใส่ userId ของคนที่คุณอยากดูลงไป วุ ฮ่า ฮ่า ฮ่า

You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.

12 Comments »

 
  • puri says:

    ขอโค้ดไฟล์
    http://xxx.jquerytips.com/SimpleXML/readATOM.php

    หน่อยสิครับ จะนำไปพัฒนาต่อ

    ขอบพระคุณอย่างสูง

  • [...] xml ก็เอา SimpleXML อ่าน [...]

  • oxygen says:

    ขอบคุณความรู้ดีๆมาครับทำให้ผมผ่านปัญหาที่ติดอยู่เป็นวันได้ ขอบคุณจริงๆครับ

  • zunkz says:

    โห โดนใจ อยากได้ บ้างอะ เฮีย -_-” แจกไหมน๊า

  • zunkz says:

    Warning: Invalid argument supplied for foreach() in /home/www/virtual/xxxx.com/htdocs/ee.php on line 8

    foreach ($xml->atomentry as $item) atomentry as $item)

  • u says:

    ใช้ไม่ได้ครับ

  • Nui says:

    แจ่มมากครับ ไม่ทราบว่าพอจะมีวิธีที่ทำให้ดูข้อความของเพื่อน(ไม่ใช่ Comment)ใน Hi5 ได้ป่าวครับ

  • jQuery Newbie says:

    ในตัวอย่าง atomentry กับ atomcontent คืออะไรหรอครับ ช่วยยกตัวอย่างที มันขึ้นเหมือที่คุณ zunkz บอกอ่ะครับ

  • xlife says:

    สวัสดีครับเราสามารถดึง คน online
    ออกมาได้รึป่าวครับ

    เช่น ในฐานข้อมูลของเรา ของสมาชิกแต่ละคน จะมีเก็บ hi5 ของแต่ละคนไว้

    ถ้าเราต้องการดึงสมาชิกของเราและที่ออนไล hi5 อยู่ด้วย มาแสดงที่หน้าเว็ปเราโดนเป็น username ของเว็ปเรา อะครับ

    http://api.hi5.com/rest_presence.getOnlineFriends.html

  • LhaR says:

    สวัสดีค่ะ
    พอจะทราบไหมค่ะว่าจะแก้ไข หรือ ลบ ข้อมูลใน xml ยังไงอะค่ะ
    ดึงข้อมูลมาดูแสดงบนหน้าเว็บได้ แต่ไม่รู้วิธีแก้ไขข้อมูลแล้วบันทึกกลับไปยัง xml ไฟล์เดิมอะค่ะ
    ช่วยหน่อยนะค่ะ จนปัญญาแล้วอะค่ะ
    ขอบคุณมากค่ะ

  • Tee++; says:

    ปกติผมไม่ค่อยจะตอบผ่าน Comment หรอกนะครับ แต่เอาเป็นว่าวันนี้จะตอบให้ละกันครับ

    การ Edit หรือ Modify XML นั้นก็เหมือนปกติ คือเราจะต้องอ่านมาก่อน

    ถ้าใช้เป็น Simple XML เราจะทำการแก้ไข ประมาณนี้
    $xml = new SimpleXMLElement($xmlstr);
    $xml->book[0]->characters->character[0]->name = ‘Big Cliff’;
    echo $xml->asXML();

    แต่ถ้าเป็น DOM จะอ่านออกมาตรงจุดที่ต้องการแลเวใช้คำสั่งพวก AppendChild , CreateTextNode และต่างๆ จากนั้น Save กลับด้วย
    $test1 = $dom->saveXML();
    $dom->save(‘test1.xml’)

    ประมาณนี้ล่ะ

  • devil says:

    มันใช่ไม่ได้อ่ะคะ ช่วยส่งมาในเมลหน่อยได้มั้ยคะ
    red.little_devil@hotmail.com

 

Leave a Reply

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>