Belajar mengurai XML sering dianggap sebagai usaha yang kompleks, tetapi tidak harus demikian. XML sangat terstruktur dan ketat, sehingga relatif dapat diprediksi. Ada juga banyak alat di luar sana untuk membantu membuat pekerjaan dapat dikelola.
Salah satu utilitas XML favorit saya adalah XMLStarlet, toolkit XML untuk terminal Anda. Dengan XMLStarlet, Anda dapat memvalidasi, mengurai, mengedit, memformat, dan mengubah data XML. XMLStarlet adalah perintah yang relatif minimal, tetapi menavigasi XML penuh potensi, jadi artikel ini menunjukkan cara menggunakannya untuk kueri data XML.
Instal
XMLStarlet diinstal secara default pada CentOS, Fedora, dan banyak distribusi Linux modern lainnya, jadi cukup buka terminal dan ketik xmlstarlet
untuk mengaksesnya. Jika XMLStarlet belum diinstal, sistem operasi Anda menawarkan untuk menginstalnya untuk Anda.
Sebagai alternatif, Anda dapat menginstal xmlstarlet
perintah dari manajer paket Anda:
$ sudo dnf install xmlstarlet
Lebih banyak sumber daya Linux
- Lembar contekan perintah Linux
- Lembar contekan perintah Linux tingkat lanjut
- Kursus online gratis:Ikhtisar Teknis RHEL
- Lembar contekan jaringan Linux
- Lembar contekan SELinux
- Lembar contekan perintah umum Linux
- Apa itu container Linux?
- Artikel Linux terbaru kami
Di macOS, gunakan MacPorts atau Homebrew. Di Windows, gunakan Chocolatey.
Jika semuanya gagal, Anda dapat menginstalnya secara manual dari kode sumber di Sourceforge.
Mengurai XML dengan XMLStarlet
Ada banyak alat yang dirancang untuk membantu mengurai dan mengubah data XML, termasuk pustaka perangkat lunak yang memungkinkan Anda menulis parser Anda sendiri dan perintah kompleks seperti fop
dan xsltproc
. Terkadang Anda tidak perlu memproses data XML; Anda hanya perlu cara mudah untuk mengekstrak data penting dari, memperbarui, atau hanya memvalidasinya. Untuk interaksi XML spontan, saya menggunakan xmlstarlet
, aplikasi bergaya "pisau Tentara Swiss" klasik yang melakukan tugas XML paling umum. Anda dapat melihat apa yang ditawarkannya dengan menjalankan perintah bersama dengan --help
pilihan:
$ xmlstarlet --help
Penggunaan:xmlstarlet [] [ ]
di manaadalah salah satu dari:
ed (atau edit ) - Edit/Perbarui dokumen XML
sel (atau pilih) - Pilih data atau kueri dokumen XML (XPATH, dll)
tr (atau transformasi) - Transformasi dokumen XML menggunakan XSLT
val (atau validasi) - Validasi dokumen XML (well-formed/DTD/XSD/RelaxNG)
untuk (atau format) - Format dokumen XML
el (atau elemen) - Menampilkan struktur elemen dokumen XML
c14n (atau kanonik) - Kanonikalisasi XML
ls (atau daftar) - Daftar direktori sebagai XML
[...]
Anda bisa mendapatkan bantuan lebih lanjut dengan menambahkan --help
ke akhir salah satu subperintah berikut:
$ xmlstarlet sel --help
-Q or --quiet - jangan menulis apa pun ke output standar.
-C atau --comp - menampilkan XSLT yang dihasilkan
-R atau - -root - print root element
-T atau --text - output adalah teks (default adalah XML)
-I atau --indent - indent output
[.. .]
Memilih data dengan sel
Anda dapat melihat data dalam XML dengan xmlstarlet select
(sel
singkatnya) perintah. Berikut adalah dokumen XML sederhana:
Fedora
7
Moonshine
Langsung
Fedora
Semuanya
Fedora Core
6
Zod
Saat mencari data dalam file XML, tugas pertama Anda adalah fokus pada node yang ingin Anda jelajahi. Jika Anda mengetahui jalur ke simpul, tentukan jalur lengkapnya dengan --value-of
pilihan. Semakin awal pohon Document Object Model (DOM) Anda mulai menjelajah, semakin banyak informasi yang Anda lihat:
$ xmlstarlet pilih --template \
--value-of /xml/os/linux/distribution \
--nl myfile.xml
Fedora
7
Moonshine
Live
Fedora
Semuanya
Fedora Core
--nl
singkatan dari "baris baru", dan itu menyisipkan banyak spasi untuk memastikan terminal prompt Anda mendapatkan baris baru setelah hasil Anda masuk. Saya telah menghapus beberapa ruang berlebih dalam output sampel.Persempit fokus Anda dengan turun lebih jauh ke dalam pohon DOM:
$ xmlstarlet pilih --template \
--value-of /xml/os/linux/distribution/name \
--nl myfile.xml
Fedora
Fedora IntiPilihan bersyarat
Salah satu alat yang paling kuat untuk navigasi dan parsing XML disebut XPath. Ini mengatur sintaks yang digunakan dalam pencarian XML dan memanggil fungsi dari pustaka XML. XMLStarlet memahami ekspresi XPath, sehingga Anda dapat membuat pilihan Anda bersyarat dengan fungsi XPath. XPath memiliki banyak fungsi, dan didokumentasikan secara rinci oleh W3C, tetapi menurut saya dokumentasi XPath Mozilla lebih ringkas.
Anda dapat menggunakan tanda kurung siku sebagai fungsi pengujian, membandingkan konten elemen dengan beberapa nilai. Berikut adalah tes untuk nilai
<name>
elemen, yang mengembalikan nomor rilis yang hanya terkait dengan kecocokan tertentu.Bayangkan sejenak bahwa contoh file XML berisi semua rilis Fedora yang dimulai dengan 1. Untuk melihat semua nomor rilis yang terkait dengan nama lama "Fedora Core" (proyek menghapus "Core" dari nama sejak rilis 7 dan seterusnya):
$ xmlstarlet sel --template \
--value-of '/xml/os/linux/distribution[name ="Fedora Core"]/release' \
--nl myfile.xml
6
5
4
3
2
1Anda juga dapat melihat semua nama kode untuk rilis tersebut, dengan mengubah
--value-of
jalur ke/xml/os/linux/distribution[name = "Fedora Core"]/codename
.Mencocokkan jalur dan mendapatkan nilai
Keuntungan melihat tag XML sebagai node adalah setelah Anda menemukan node, Anda dapat menganggapnya sebagai "direktori" data Anda saat ini. Ini sebenarnya bukan direktori, setidaknya tidak dalam arti sistem file, tetapi ini adalah kumpulan data yang dapat Anda kueri. Untuk membantu Anda menjaga tujuan Anda dan data "di dalamnya" terpisah, XMLStarlet membedakan antara apa yang Anda coba cocokkan dengan
--match
opsi dan nilai data yang Anda inginkan dengan--value-of
pilihan.Misalkan Anda tahu bahwa
<spin>
simpul berisi beberapa elemen. Itu menjadikannya tujuan Anda. Setelah Anda berada di sana, Anda dapat menggunakan--value-of
untuk menentukan elemen mana yang Anda inginkan nilainya. Untuk melihat semua elemen, gunakan titik (.
) untuk mewakili lokasi Anda saat ini:$ xmlstarlet sel --template \
--match '/xml/os/linux/distribution/spin' \
--value-of '.' --nl myfile.xml \
Langsung
Fedora
SemuanyaSeperti halnya menavigasi DOM, Anda dapat menggunakan ekspresi XPath untuk membatasi cakupan data yang dikembalikan. Dalam contoh ini, saya menggunakan
last()
berfungsi untuk mengambil hanya elemen terakhir dalamspin
simpul:$ xmlstarlet pilih --template \
--match '/xml/os/linux/distribution/spin' \
--value-of '*[last()]' --nl myfile.xml
SemuanyaDalam contoh ini, saya menggunakan
position()
fungsi untuk memilih elemen tertentu dalamspin
simpul:$ xmlstarlet pilih --template \
--match '/xml/os/linux/distribution/spin' \
--value-of '*[position() =2]' - -nl myfile.xml
Fedora
--match
dan--value-of
opsi dapat tumpang tindih, jadi terserah Anda bagaimana Anda ingin menggunakannya bersama-sama. Kedua ekspresi ini, dalam kasus contoh XML, melakukan hal yang sama:$ xmlstarlet pilih --template \
--match '/xml/os/linux/distribution/spin' \
--value-of '.' \
--nl myfile.xml
Langsung
Fedora
Semuanya
$ xmlstarlet pilih --template \
--match '/ xml/os/linux/distribution' \
--value-of 'spin' \
--nl myfile.xml
Langsung
Fedora
SemuanyaMenjadi nyaman dengan XML
XML terkadang terlihat berlebihan dan berat, tetapi alat yang dibuat untuk berinteraksi dengannya secara konsisten mengejutkan saya. Jika Anda ingin memanfaatkan XML, maka XMLStarlet bisa menjadi titik masuk yang baik. Lain kali Anda akan membuka file XML untuk melihat data terstruktur, coba gunakan XMLStarlet dan lihat apakah Anda dapat membuat kueri data tersebut. Semakin nyaman Anda menggunakan XML, semakin baik XML melayani Anda sebagai format data yang kuat dan fleksibel.
5 alat Rust yang patut dicoba di baris perintah Linux Enkripsi dan dekripsi file dengan frasa sandi di LinuxLinux