Pelajari tentang ekstensi SimpleXML yang dibundel dengan PHP versi 5, yang memungkinkan halaman PHP melakukan kueri, mencari, memodifikasi, dan menerbitkan ulang XML dalam sintaks ramah PHP.
PHP versi 5 memperkenalkan SimpleXML, antarmuka pemrograman aplikasi (API) baru untuk membaca dan menulis XML. Di SimpleXML, ekspresi berikut:
$doc->rss->channel->item->title
Pilih elemen dari dokumen. Ungkapan ini mudah untuk ditulis selama Anda memahami struktur dokumennya. Namun, jika tidak jelas di mana elemen yang diperlukan muncul (seperti di Docbook, HTML, dan dokumen narasi serupa), SimpleXML dapat menggunakan ekspresi XPath untuk menemukan elemen tersebut.
Memulai SimpleXML
Misalkan Anda memerlukan halaman PHP untuk mengubah RSS feed menjadi HTML. RSS adalah format XML sederhana untuk menerbitkan konten tertaut. Elemen root dari dokumen ini adalah rss, yang berisi elemen saluran. Elemen saluran berisi metadata tentang feed, seperti judul, bahasa, dan URL. Ini juga berisi berbagai laporan yang dikemas dalam elemen item. Setiap item memiliki elemen link, yang berisi URL, dan judul atau deskripsi (biasanya keduanya), yang berisi teks biasa. Tidak ada namespace yang digunakan. Tentu saja ada lebih dari itu RSS, tapi itu sudah cukup untuk artikel ini. Listing 1 menunjukkan contoh tipikal, yang berisi dua item berita.
Daftar 1. Umpan RSS
<?xml version="1.0" coding="UTF-8"?>
<rss versi="0.92">
<saluran>
<title>Mokka dan Schlag</title>
<link>http://www.elharo.com/blog</link>
<bahasa>id</bahasa>
<barang>
<title>Penn Station: Hilang tapi Tidak Terlupakan</title>
<deskripsi>
Stasiun Penn lama di New York telah dirobohkan sebelum saya lahir.
Melihat gambar-gambar ini, rasanya seperti sebuah kesalahan
fungsional, tapi tidak lebih; hanya beberapa menara perkantoran dan bawah tanah
koridor yang tidak menarik atau indah. Madison Square yang baru...
</deskripsi>
<link>http://www.elharo.com/blog/new-york/2006/07/31/penn-station</link>
</barang>
<barang>
<title>Pribadi untuk Elliotte Harold</title>
<deskripsi>Beberapa orang menggunakan filter spam yang sangat menjengkelkan dan mengharuskan Anda
untuk mengetikkan beberapa string acak pada subjek Anda seperti E37T untuk melewatinya.
Tak perlu dikatakan lagi, baik saya maupun kebanyakan orang lain tidak mau repot-repot berkomunikasi
paranoid ini. Mereka bereaksi berlebihan terhadap masalah spam.
Secara pribadi saya tidak akan...</description>
<link>http://www.elharo.com/blog/tech/2006/07/28/personal-for-elliotte-harold/</link>
</barang>
</saluran>
</rs>
Mari kita kembangkan halaman PHP untuk memformat RSS feed menjadi HTML. Listing 2 menunjukkan struktur dasar halaman ini.
Listing 2. Struktur statis kode PHP
<?php // Memuat dan mengurai dokumen XML ?>
<html xml:lang="en" lang="en">
<kepala>
<title><?php // Judul akan dibaca dari RSS ?></title>
</kepala>
<body>
<h1><?php // Judul akan dibaca lagi dari RSS ?></h1>
<?php
// Di sini kita akan memasang loop untuk menyertakan judul dan deskripsi setiap item
?>
</tubuh>
</html>
Mengurai dokumen XML
Langkah pertama adalah mengurai dokumen XML dan menyimpannya ke dalam variabel. Yang diperlukan hanyalah satu baris kode, meneruskan URL ke fungsi simplexml_load_file():
$rss = simplexml_load_file('http://partners.userland.com/nytRss/nytHomepage.xml');
Untuk contoh ini, saya telah mengisi halaman dari feed New York Times Userland (di http://partners.userland.com/nytRss/nytHomepage.xml ). Tentu saja, URL apa pun ke RSS feed lain juga dapat digunakan.
Perhatikan bahwa meskipun namanya simplexml_load_file(), fungsi ini sebenarnya mem-parsing dokumen XML pada URL HTTP jarak jauh. Tapi itu bukan satu-satunya hal yang aneh tentang fungsi ini. Nilai yang dikembalikan (di sini disimpan dalam variabel $rss) tidak menunjuk ke keseluruhan dokumen, seperti yang mungkin Anda harapkan jika Anda telah menggunakan API lain seperti Document Object Model (DOM). Sebaliknya, ini menunjuk ke elemen akar dokumen. Isi prolog dan epilog dokumen tidak dapat diakses dari SimpleXML.
Temukan judul feed
Judul keseluruhan feed (bukan judul masing-masing cerita di feed) terletak di judul anak saluran elemen akar rss. Sangat mudah untuk menemukan judul seolah-olah dokumen XML adalah bentuk serial dari objek kelas rss, dengan bidang salurannya sendiri memiliki bidang judul. Menggunakan sintaks referensi objek PHP biasa, pernyataan untuk mencari judul adalah sebagai berikut:
$title = $rss->channel->title;
Setelah ditemukan, itu dapat ditambahkan ke HTML keluaran. Caranya mudah, cukup echo variabel $title:
<title><?php echo $title>
Baris ini menampilkan nilai string elemen, bukan keseluruhan elemen. Artinya, konten teksnya tertulis tetapi tagnya tidak disertakan.
Anda bahkan dapat melewatkan variabel perantara $title sepenuhnya:
<title><?php echo $rss->channel->title>;
Karena halaman menggunakan kembali nilai ini di banyak tempat, menurut saya akan lebih mudah untuk menyimpannya dalam variabel dengan arti yang jelas.
…