Cara menggunakan php xml to array

Contoh file XML yang akan kita olah, beri nama kurs.xml. File tersebut bisa disimpen di file hosting atau dimanapun untuk testing. Banyak file XML yang jauh lebih kompleks, tapi untuk belajar ada baiknya dari yang mudah terlebih dahulu agar dapat logikanya.

 version="1.0" encoding="ISO-8859-1"?>
>
	>
		>AUD>
		> 9,276.00>
         	> 9,757.00>
	>
        >
		>GBP>
		>17,033.00>
		>17,581.00>
	>
       >
		>CAD>
		>10,343.00>
		>10,879.00>
	>
	>
		>CNY>
		>1,790.43>
		>2,148.52>
	>
	>
		>EUR>
		>15.420.00>
		>16,068.00>
	>
	>
		>HKD>
		>1,663.62>
		>1,839.98>
	>
 
	>
		>JPY>
		>130.76>
		>137.89>
	>
 
	>
		>NZD>
		>8,699.00>
		>9,183.00>
	>
 
	>
		>SGD>
		> 9,966.00>
		>10,429.00>
	>
 
 
	>
		>SEK>
		>1,439.00>
		>1,497.00>
	>
 
	>
		>CHF>
		>14,149.00>
		>14,709.00>
	>
 
	>
		>USD>
		>13,982.00>
		>14,474.00>
	>
>

Daripada kita memecah baris perbaris tersebut berdasarkan tag contoh, jauh lebih baik bila kita merubah data tersebut kedalam object lalu merubahnya kedalam array agar lebih mudah diolah. Kita buat script sederhana parsing-xml.php


// parsing-xml.php
$xmlurl = file_get_contents("http://localhost:9900/kurs.xml");
$xml = simplexml_load_string($xmlurl, "SimpleXMLElement", LIBXML_NOCDATA);
var_dump($xml);

jalankan script diatas, struktrurnya lebih mudah dipahami

class SimpleXMLElement#1 (1) {
  public $rate =>
  array(12) {
    [0] =>
    class SimpleXMLElement#2 (3) {
      public $matauang =>
      string(3) "AUD"
      public $beli =>
      string(9) " 9,276.00"
      public $jual =>
      string(9) " 9,757.00"
    }
    [1] =>
    class SimpleXMLElement#3 (3) {
      public $matauang =>
      string(3) "GBP"
      public $beli =>
      string(9) "17,033.00"
      public $jual =>
      string(9) "17,581.00"
    }
    [2] =>
    class SimpleXMLElement#4 (3) {
      public $matauang =>
      string(3) "CAD"
      public $beli =>
      string(9) "10,343.00"
      public $jual =>
      string(9) "10,879.00"
    }
    [3] =>
    class SimpleXMLElement#5 (3) {
      public $matauang =>
      string(3) "CNY"
      public $beli =>
      string(8) "1,790.43"
      public $jual =>
      string(8) "2,148.52"
    }
    [4] =>
    class SimpleXMLElement#6 (3) {
      public $matauang =>
      string(3) "EUR"
      public $beli =>
      string(9) "15.420.00"
      public $jual =>
      string(9) "16,068.00"
    }
    [5] =>
    class SimpleXMLElement#7 (3) {
      public $matauang =>
      string(3) "HKD"
      public $beli =>
      string(8) "1,663.62"
      public $jual =>
      string(8) "1,839.98"
    }
    [6] =>
    class SimpleXMLElement#8 (3) {
      public $matauang =>
      string(3) "JPY"
      public $beli =>
      string(6) "130.76"
      public $jual =>
      string(6) "137.89"
    }
    [7] =>
    class SimpleXMLElement#9 (3) {
      public $matauang =>
      string(3) "NZD"
      public $beli =>
      string(8) "8,699.00"
      public $jual =>
      string(8) "9,183.00"
    }
    [8] =>
    class SimpleXMLElement#10 (3) {
      public $matauang =>
      string(3) "SGD"
      public $beli =>
      string(9) " 9,966.00"
      public $jual =>
      string(9) "10,429.00"
    }
    [9] =>
    class SimpleXMLElement#11 (3) {
      public $matauang =>
      string(3) "SEK"
      public $beli =>
      string(8) "1,439.00"
      public $jual =>
      string(8) "1,497.00"
    }
    [10] =>
    class SimpleXMLElement#12 (3) {
      public $matauang =>
      string(3) "CHF"
      public $beli =>
      string(9) "14,149.00"
      public $jual =>
      string(9) "14,709.00"
    }
    [11] =>
    class SimpleXMLElement#13 (3) {
      public $matauang =>
      string(3) "USD"
      public $beli =>
      string(9) "13,982.00"
      public $jual =>
      string(9) "14,474.00"
    }
  }
}

untuk mengambil kurs beli, bisa langsung di looping dengan


 
$xmlurl = file_get_contents("http://localhost:9900/kurs.xml");
$xml = simplexml_load_string($xmlurl, "SimpleXMLElement", LIBXML_NOCDATA);
$kursBeli = [];
$kursJual = [];
foreach ($xml->rate as $data) {
    $kursBeli[] = $data->beli;
    $kursJual[] = $data->jual;
}
 
echo $kursBeli[0];
// 9,276.00

Cara lain, gunakan bantuan json_encode dan json_decode untuk ‘membersihkan’ data yang tidak perlu dari XML diatas.


// parsing-xml.php
$xmlurl = file_get_contents("http://localhost:9900/kurs.xml");
$xml = simplexml_load_string($xmlurl, "SimpleXMLElement", LIBXML_NOCDATA);
$json = json_encode($xml);
$array = json_decode($json, TRUE);
var_dump($array);

jalankan lagi script diatas

array(1) {
  'rate' =>
  array(12) {
    [0] =>
    array(3) {
      'matauang' =>
      string(3) "AUD"
      'beli' =>
      string(9) " 9,276.00"
      'jual' =>
      string(9) " 9,757.00"
    }
    [1] =>
    array(3) {
      'matauang' =>
      string(3) "GBP"
      'beli' =>
      string(9) "17,033.00"
      'jual' =>
      string(9) "17,581.00"
    }
    [2] =>
    array(3) {
      'matauang' =>
      string(3) "CAD"
      'beli' =>
      string(9) "10,343.00"
      'jual' =>
      string(9) "10,879.00"
    }
    [3] =>
    array(3) {
      'matauang' =>
      string(3) "CNY"
      'beli' =>
      string(8) "1,790.43"
      'jual' =>
      string(8) "2,148.52"
    }
    [4] =>
    array(3) {
      'matauang' =>
      string(3) "EUR"
      'beli' =>
      string(9) "15.420.00"
      'jual' =>
      string(9) "16,068.00"
    }
    [5] =>
    array(3) {
      'matauang' =>
      string(3) "HKD"
      'beli' =>
      string(8) "1,663.62"
      'jual' =>
      string(8) "1,839.98"
    }
    [6] =>
    array(3) {
      'matauang' =>
      string(3) "JPY"
      'beli' =>
      string(6) "130.76"
      'jual' =>
      string(6) "137.89"
    }
    [7] =>
    array(3) {
      'matauang' =>
      string(3) "NZD"
      'beli' =>
      string(8) "8,699.00"
      'jual' =>
      string(8) "9,183.00"
    }
    [8] =>
    array(3) {
      'matauang' =>
      string(3) "SGD"
      'beli' =>
      string(9) " 9,966.00"
      'jual' =>
      string(9) "10,429.00"
    }
    [9] =>
    array(3) {
      'matauang' =>
      string(3) "SEK"
      'beli' =>
      string(8) "1,439.00"
      'jual' =>
      string(8) "1,497.00"
    }
    [10] =>
    array(3) {
      'matauang' =>
      string(3) "CHF"
      'beli' =>
      string(9) "14,149.00"
      'jual' =>
      string(9) "14,709.00"
    }
    [11] =>
    array(3) {
      'matauang' =>
      string(3) "USD"
      'beli' =>
      string(9) "13,982.00"
      'jual' =>
      string(9) "14,474.00"
    }
  }
}

sudah jauh lebih mudah. Karena datanya sudah bersih dari tag ataupun sesuatu yang tidak dibutuhkan.

Tulisan menarik lainnya

  • Parsing XML di PHP Dengan Simplexml

    Contoh file xml yang akan kita gunakan diambil dari situs microsoft. Ambil file tersebut lalu…

  • Parsing Data Text dengan PHP

    Contoh kasus disini adalah saya punya data di file data.txt yang ingin saya parsing dan…

  • Membuat Kalender dengan PHP

    Buat sebuah file dengan nama kalender.php lalu tambahkan script dibawah ini Minggu Senin Selasa Rabu…