author Ahmad Muhardian

Cara Parsing XML di Python dengan DOM API


Pemrograman Python

Python memungkinkan kita melakukan parsing (penguraian) dan manipulasi terhadap file XML dengan DOM API.

DOM (Document Object Model) adalah sebuah API yang menyediakan fungsi-fungsi untuk memanipulasi dokumen.

Salah satu modul DOM yang dapat kita gunakan untuk parsing XML adalah MiniDOM.

Pada kesempatan ini kita akan belajar cara parsing file XML dan HTML menggunakan MiniDom.

Apa saja yang akan kita pelajari?

  • Cara Parsing XML di Python
  • Cara Membuat Node/Elemen

Mari kita mulai…

Parsing XML di Python

Pertama, silahkan persiapkan sebuah file XML untuk di-parse.

Letakan filenya satu direktori dengan file program python-nya:

File XML dan Python

Isi File XML-nya seperti berikut:

<?xml version="1.0" encoding="UTF-8" ?>
<mahasiswa>
    <nama>Rena</nama>
    <alamat>Surabaya</alamat>
    <jurusan>Teknik Informatika</jurusan>

    <hobi name="Blogging"/>
    <hobi name="Membaca Buku"/>
    <hobi name="Nonton Anime"/>
</mahasiswa>

Pada file tersebut, terdapat node akar (root) yaitu <mahasiswa>, di dalamnya terdapat node lagi yang berisi data mahasiswa yang akan kita parse.

Selanjutnya silahkan kita buat program python-nya:

import xml.dom.minidom as minidom

def main():
    # gunakan fungsi parse() untuk me-load xml ke memori 
    # dan melakukan parsing
    doc = minidom.parse("mahasiswa.xml")

    # Cetak isi doc dan tag pertamanya
    print doc.nodeName
    print doc.firstChild.tagName


if __name__ == "__main__":
    main()

Sekarang coba jalankan dan perhatikan hasilnya:

Hasil eksekusi program Python XML

Penjelasannya:

Pertama kita membutuhkan modul atau library minidom, maka kita harus mengimpornya:

import xml.dom.minidom as minidom

Setelah itu, kita load file XML-nya ke memori dan langsung di-parse oleh fungsi parse() dari minidom.

doc = minidom.parse("mahasiswa.xml")

Selanjutnya, kita bisa lakukan manipulasi dengan variabel objek doc.

Sebagai contoh, kita mencetak nama node-nya dan tag pertama (root) yaitu <mahasiswa>.

print doc.nodeName
print doc.firstChild.tagName

Paham?

Sangat mudah bukan…

Baik, selanjutnya silahkan ubah dan lengkapi programmnya menjadi seperti ini:

import xml.dom.minidom as minidom

def main():
    # gunakan fungsi parse() untuk me-load xml ke memori 
    # dan melakukan parsing
    doc = minidom.parse("mahasiswa.xml")

    # Cetak isi doc dan tag pertamanya
    print doc.nodeName
    print doc.firstChild.tagName

    nama = doc.getElementsByTagName("nama")[0].firstChild.data
    alamat = doc.getElementsByTagName("alamat")[0].firstChild.data
    jurusan = doc.getElementsByTagName("jurusan")[0].firstChild.data
    list_hobi = doc.getElementsByTagName("hobi")

    print "Nama: {}\nAlamat: {}\nJurusan: {}\n".format(nama, alamat, jurusan)

    print "Memiliki {} hobi:".format(len(list_hobi))

    for hobi in list_hobi:
        print "-", hobi.getAttribute("name")


if __name__ == "__main__":
    main()

Sekarang coba eksekusi, maka hasil outputnya akan seperti ini:

#document
mahasiswa
Nama: Rena
Alamat: Surabaya
Jurusan: Teknik Informatika

Memiliki 3 hobi:
- Blogging
- Membaca Buku
- Nonton Anime

Penjelasan:

Nah untuk mengambil nilai dari node XML, kita dapat menggunakna fungsi getElementsByTagName().

Artinya kita memilih semua elemen dengan nama tag tertentu.

Fungsi tersebut akan menghasilkan list, bertasakan banyak elemen di dalam XML.

Misalkan untuk tag <nama>, akan menghasilkan:

[<DOM Element: nama at 0x7fe9280e2440>]

Sedangkan untuk tag <hobi>:

[
  <DOM Element: hobi at 0x7fe9280e27a0>, 
  <DOM Element: hobi at 0x7fe9280e2950>, 
  <DOM Element: hobi at 0x7fe9280e2b00>
]

List tersebut berisi objek DOM yang bisa kita ambil nilainya.

Misalkan kita ingin mengambil nilai nama:

nama = doc.getElementsByTagName("nama")[0].firstChild.data

Kita memilih objek DOM pada indeks ke-0, dan mengambil isinya.

Sedangkan untuk tag <hobi>, kita bisa menggunakan perulangan dan method getAttribute() untuk mengambil nilai dari atribut.

for hobi in list_hobi:
    print "-", hobi.getAttribute("name")

Menambahkan Node pada XML

Node atau elemen dapat kita tambahkan dengan beberapa metode.

Contoh:

# Membuat elemen XML baru <hobi>
hobi_baru = doc.createElement("hobi")
# Menambahkan atribut name pada <hobi> dengan nilai "programming"
hobi_baru.setAttribute("name", "Programming")
# Menambahkan elemen tersebut ke dalam <mahasiswa>
doc.firstChild.appendChild(hobi_baru)

Sekarang modifikasi kembali kode tadi menjadi seperti ini:

import xml.dom.minidom as minidom

def main():
    # gunakan fungsi parse() untuk me-load xml ke memori 
    # dan melakukan parsing
    doc = minidom.parse("mahasiswa.xml")

    # Cetak isi doc dan tag pertamanya
    print doc.nodeName
    print doc.firstChild.tagName

    nama = doc.getElementsByTagName("nama")[0].firstChild.data
    alamat = doc.getElementsByTagName("alamat")[0].firstChild.data
    jurusan = doc.getElementsByTagName("jurusan")[0].firstChild.data
    

    print "Nama: {}\nAlamat: {}\nJurusan: {}\n".format(nama, alamat, jurusan)

    # Mendambahkan Elemen
    hobi_baru = doc.createElement("hobi")
    hobi_baru.setAttribute("name", "Programming")
    doc.firstChild.appendChild(hobi_baru)

    # Ambil kembali daftar hobi
    list_hobi = doc.getElementsByTagName("hobi")

    print "Memiliki {} hobi:".format(len(list_hobi))

    for hobi in list_hobi:
        print "-", hobi.getAttribute("name")


if __name__ == "__main__":
    main()

Sekarang coba eksekusi dan perhatikanlah hasilnya:

#document
mahasiswa
Nama: Rena
Alamat: Surabaya
Jurusan: Teknik Informatika

Memiliki 4 hobi:
- Blogging
- Membaca Buku
- Nonton Anime
- Programming

Hobi sekarang ada 4…

Tunggu dulu, kok di file XML-nya tidak bertamabah?

Penambahan yang kita lakukan di atas bersifat temporer, artinya kalau programnya ditutup semua akan hilang.

Karena elemen tersebut hanya terseimpan dalam memori saja.

Bagaimana kalau kita igin menyimpannya ke dalam file XML?

Gampang.

Kita bisa gunakan teknik baca dan tulis file di Python.

Contoh:

# buka file XML dengan mode write (w)
file_xml = open("mahasiswa.xml","w")
# tulis XML yang ada di memori ke file XML
doc.writexml(file_xml)
# tutup file XML
file_xml.close()

Silahkan tambahakan kode tersebut pada program sebelumnya:

import xml.dom.minidom as minidom

def main():
    # gunakan fungsi parse() untuk me-load xml ke memori 
    # dan melakukan parsing
    doc = minidom.parse("mahasiswa.xml")

    # Cetak isi doc dan tag pertamanya
    print doc.nodeName
    print doc.firstChild.tagName

    nama = doc.getElementsByTagName("nama")[0].firstChild.data
    alamat = doc.getElementsByTagName("alamat")[0].firstChild.data
    jurusan = doc.getElementsByTagName("jurusan")[0].firstChild.data
    

    print "Nama: {}\nAlamat: {}\nJurusan: {}\n".format(nama, alamat, jurusan)

    hobi_baru = doc.createElement("hobi")
    hobi_baru.setAttribute("name", "Programming")
    doc.firstChild.appendChild(hobi_baru)

    list_hobi = doc.getElementsByTagName("hobi")

    print "Memiliki {} hobi:".format(len(list_hobi))

    for hobi in list_hobi:
        print "-", hobi.getAttribute("name")

    file_xml = open("mahasiswa.xml","w")
    doc.writexml(file_xml)
    file_xml.close()


if __name__ == "__main__":
    main()

Setelah itu, eksekusi dan coba buka file mahasiswa.xml.

Menulis File XML

Ajaib! 😄

Tag <hobi name="Programming"/> sudah ditambahkan.

Akhir Kata…

Itulah beberapa teknik memanipulasi, parsing, dan menulis file XML.

Selanjutnya mungkin kamu bisa membuat:

  • RSS Feed Reader yang membaca XML dari RSS Feed
  • Atau membuat sitemap.xml untuk website yang dibangun dengan Python

Kalau ada pertanyaan terkait dengan tutorial ini, silahkan samapaikan melalui komentar.

✍️ Catatan 22 Agustus 2017

Modul minidom tidak saya rekomendasikan, karena terdapat celah keamanan (vulnerabilities), tapi setidaknya kita bisa paham cara manipulasi file XML di Python dengan Modul ini.

Baca Juga ini

Program bilangan ganjil-genap dengan python

Program bilangan ganjil-genap dengan python

Komputer adalah sebuah mesin yang tidak mampu berpikir. Menebak bilangan ganjil atau genap saja tidak bisa. Tapi, berkat bantuan programer komputer dapat melakukannya. Di artikel ini saya ingin menunjukan cara memanfaatkan struktur pemilihan agar komputer dapat berpikir dan mengetahui bilangan genap dan ganjil. Sebuah bilangan dikatakan genap jika habis dibagi dua. Dengan demikian, kita dapat memecahkan masalah ini dengan mencari sisa bagi dua dari bilangan tersebut.

Belajar Django #1: Pengenalan Dasar Django untuk Pemula

Belajar Django #1: Pengenalan Dasar Django untuk Pemula

Pengenalan Django, Instalasi Django, Membuat Project Django, dan Memahami struktur project Django

Tutorial PyGTK #2: Belajar Membuat Tombol, Label, dan Event Click Handler

Tutorial PyGTK #2: Belajar Membuat Tombol, Label, dan Event Click Handler

Pada tutorial ini, kamu akan belajar cara membuat tombol dan label. Serta belajar cara membuat fungsi untuk event handler pada tombol...

Tutorial PyGTK #1: Belajar Pemrograman GUI dengan Python dan PyGTK di Linux

Tutorial PyGTK #1: Belajar Pemrograman GUI dengan Python dan PyGTK di Linux

GUI adalah singkatan dari Graphical User Interface. Aplikasi GUI memang mudah digunakan. Karena terdapat tampilan visual grafis yang bisa diklik. Salah satu modul atau libraray yang sering digunakan untuk membuat aplikasi GUI adalah GTK+. Pada kesempatan ini, kita akan menggunakan modul tersebut dengan mencoba membuat sebuah jendela atau window. Mari kita mulai… googletag.cmd.push(function () { googletag.display('div-gpt-ad-multibanner1'); }); Apa itu GTK+ dan PyGTK?Sebelum itu, kamu harus pahami dulu apa perbedaan dari GTK+ dan PyGTK.

Belajar Pemrograman Python: Memahami Perulangan

Belajar Pemrograman Python: Memahami Perulangan

Perualangan dalam bahasa pemrograman berfungsi menyuruh komputer melakukan sesuatu secara berulang-ulang. Terdapat dua jenis perualangan dalam bahasa pemrograman python, yaitu perulangan dengan for dan while. Perulangan for disebut counted loop (perulangan yang terhitung), sementara perulangan while disebut uncounted loop (perulangan yang tak terhitung). Perbedaannya adalah perulangan for biasanya digunakan untuk mengulangi kode yang sudah diketahui banyak perulangannya. Sementara while untuk perulangan yang memiliki syarat dan tidak tentu berapa banyak perulangannya.

Belajar Pemrograman Python: Memahami Percabangan untuk Membuat Logika Program

Belajar Pemrograman Python: Memahami Percabangan untuk Membuat Logika Program

Mungkin kalian akan bertanya: Apa itu percabangan dan kenapa dinamakan percabangan? Buat yang belum pernah kuliah atau belajar tentang algoritme dan flowchart, mungkin ini istilah yang baru pertama kamu dengar. Isitilah ini sebenarnya untuk menggambarkan alur program yang bercabang. Pada flow chart, logika “jika…maka” digambarkan dalam bentuk cabang. Karena itu, ini disebut percabangan. Selain percabangan, struktur ini juga disebut control flow, decision, struktur kondisi, Struktur if, dsb.