มาอ่าน XML แบบง่ายๆ ด้วย SimpleXML
จำได้มั้ยครับ สมัยก่อนเวลาเราจะอ่าน xml โดยใช้ php ที ต้องไปใช้คำสั่งตระกูล xml_parser ที่แสนวุ่นวาย มาจน PHP5 เพิ่มคำสั่ง simplexml มา และแล้วทุกอย่างก็เปลี่ยนไปตลอดกาล….
คำสั่ง simplexml เป็น extension ที่เริ่มมีมาใน PHP5 นี้เอง ชุดคำสั่งสามารถช่วยเราจัดการ xml ได้อย่างสบายมือ หยั่งกะท่อง array ^^ วันนี้ผมจะมา อธิบายแค่ชุดคำสั่งที่ใช้ในการ read เท่านั้นก่อน จะได้ไม่เป็นการยากเกินไป
เอาละเบื้องต้นหา xml เป้าหมายกันก่อน เอาเป็น hi5 นี่ล่ะว้า คนเล่นเยอะดี
-
<?php
-
$url = "http://api.hi5.com/rest/feed/albumlist/106835745";
-
// SimpleXML ไม่ชอบ xml ในรูปแบบ <atom:field> เราจึง replace มันออกไปก่อน
-
-
// วนลูปโดยทำการชี้ ไปที่ชุดที่เราต้องการได้เลย
-
foreach ($xml->atomentry as $item)
-
{
-
// ทำการดึง content ออกมา
-
";
-
}
-
?>
เพียงเท่านี้ครับ ง่ายมั้ยล่ะ นอกจากนี้ simplexml ยังมีของวิเศษอีกชิ้นนึง นั่นก็คือ xpath ครับ
xpath เป็นตัวที่ทำให้เราข้ามชุดข้อมูลที่เราไม่ต้องการได้ทันทีเลย
เช่นผมมี xml ตามแบบด้านล้างนี้
-
<?php
-
$string = <<<XML
-
<a>
-
<b>
-
<c>text</c>
-
<c>stuff</c>
-
</b>
-
<d>
-
<c>code</c>
-
</d>
-
</a>
-
XML;
-
?>
ผมสามารถที่จะเข้าถึง ข้อมูลชุด c ได้เลย โดยเขียนแบบนี้
-
$xml = new SimpleXMLElement($string);
-
$result = $xml->xpath(‘b/c’);
หรือขี้เกียจหนักเลยผมจะใช้แบบนี้ก็ยังได้
-
$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.
ขอโค้ดไฟล์
http://xxx.jquerytips.com/SimpleXML/readATOM.php
หน่อยสิครับ จะนำไปพัฒนาต่อ
ขอบพระคุณอย่างสูง
[...] xml ก็เอา SimpleXML อ่าน [...]
ขอบคุณความรู้ดีๆมาครับทำให้ผมผ่านปัญหาที่ติดอยู่เป็นวันได้ ขอบคุณจริงๆครับ
โห โดนใจ อยากได้ บ้างอะ เฮีย -_-” แจกไหมน๊า
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)
ใช้ไม่ได้ครับ
แจ่มมากครับ ไม่ทราบว่าพอจะมีวิธีที่ทำให้ดูข้อความของเพื่อน(ไม่ใช่ Comment)ใน Hi5 ได้ป่าวครับ
ในตัวอย่าง atomentry กับ atomcontent คืออะไรหรอครับ ช่วยยกตัวอย่างที มันขึ้นเหมือที่คุณ zunkz บอกอ่ะครับ
สวัสดีครับเราสามารถดึง คน online
ออกมาได้รึป่าวครับ
เช่น ในฐานข้อมูลของเรา ของสมาชิกแต่ละคน จะมีเก็บ hi5 ของแต่ละคนไว้
ถ้าเราต้องการดึงสมาชิกของเราและที่ออนไล hi5 อยู่ด้วย มาแสดงที่หน้าเว็ปเราโดนเป็น username ของเว็ปเรา อะครับ
http://api.hi5.com/rest_presence.getOnlineFriends.html
สวัสดีค่ะ
พอจะทราบไหมค่ะว่าจะแก้ไข หรือ ลบ ข้อมูลใน xml ยังไงอะค่ะ
ดึงข้อมูลมาดูแสดงบนหน้าเว็บได้ แต่ไม่รู้วิธีแก้ไขข้อมูลแล้วบันทึกกลับไปยัง xml ไฟล์เดิมอะค่ะ
ช่วยหน่อยนะค่ะ จนปัญญาแล้วอะค่ะ
ขอบคุณมากค่ะ
ปกติผมไม่ค่อยจะตอบผ่าน 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’)
ประมาณนี้ล่ะ
มันใช่ไม่ได้อ่ะคะ ช่วยส่งมาในเมลหน่อยได้มั้ยคะ
red.little_devil@hotmail.com