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