GNU/Linux >> Belajar Linux >  >> Linux

Linux Bash XMLLINT dengan XPATH

Favorit saya adalah xmlstarlet karena tampaknya lebih kuat daripada xmllint:

xmlstarlet sel -t -v '/resources/item[@id="index.php"]/description/text()' en.xml

cara terbaik untuk menargetkan yang spesifik, lalu menyibak ke elemen turunannya

Ekspresi XPath yang benar untuk melakukannya adalah:

/resources/item[@id="index.php"]/description/text()

Dalam bahasa Inggris biasa:Mulai dari node dokumen, ke elemen dokumen resources , ke anaknya item , tetapi hanya jika nilai id atributnya adalah "index.php", ke anaknya description dan mengambil nilai tekstualnya.

Saya menggunakan xmllint untuk memvalidasi dokumen XML, tetapi tidak pernah untuk ekspresi path. Dalam bash shell (setidaknya dengan Mac OS) ada alat yang lebih sederhana untuk mengevaluasi ekspresi XPath, yang disebut "xpath":

$ xpath en.xml '/resources/item[@id="index.php"]/description/text()'

Kemudian, diperoleh hasil sebagai berikut:

Found 1 nodes:
-- NODE --
DESCRIPTION

Jika Anda masih lebih suka xmllint, gunakan dengan cara berikut:

$ xmllint --xpath '/resources/item[@id="index.php"]/description/text()' en.xml > result.txt

Secara default, --xpath menyiratkan --noout , yang mencegah xmllint mengeluarkan file input XML. Untuk membuat keluaran lebih mudah dibaca, saya mengalihkan keluaran ke file.

$ cat result.txt 
DESCRIPTION

Linux
  1. Mengurai riwayat Bash di Linux

  2. Menggunakan pengubah kata dengan riwayat Bash di Linux

  3. Bash -c Dengan Parameter Posisi?

  1. Perintah JQ di Linux dengan Contoh

  2. Alias ​​​​dengan variabel di bash

  3. Bash:tunggu dengan batas waktu

  1. Buat musik di Linux dengan Ardor

  2. Distro Linux hanya dengan busybox dan bash?

  3. Hapus kata sandi yang dimasukkan di prompt kata sandi tersembunyi (Linux) dengan pintasan