Saat melakukan shell scripting, biasanya data akan berada dalam file catatan baris tunggal seperti csv. Sangat sederhana untuk menangani data ini dengan grep
dan sed
. Tapi saya harus sering berurusan dengan XML, jadi saya benar-benar ingin cara mengakses skrip ke data XML melalui baris perintah. Apa alat terbaik?
xml
command-line
scripting
Joseph Holsten
sumber
sumber
Jawaban:
Saya telah menemukan xmlstarlet cukup bagus dalam hal semacam ini.
http://xmlstar.sourceforge.net/
Seharusnya tersedia di sebagian besar repositori distro. Tutorial pengantar ada di sini:
http://www.ibm.com/developerworks/library/x-starlet.html
sumber
Beberapa alat yang menjanjikan:
nokogiri : parsing HTML / XML DOM di ruby menggunakan pemilih XPath & CSS
hpricot : usang
fxgrep : Menggunakan sintaks seperti XPath untuk meminta dokumen. Ditulis dalam SML, jadi pemasangan mungkin sulit.
LT XML : XML toolkit berasal dari alat SGML, termasuk
sggrep
,sgsort
,xmlnorm
dan lain-lain. Menggunakan sintaks kueri sendiri. Dokumentasinya sangat formal. Ditulis dalam C. LT XML 2 mengklaim dukungan XPath, XInclude dan standar W3C lainnya.xmlgrep2 : pencarian sederhana dan kuat dengan XPath. Ditulis dalam Perl menggunakan XML :: LibXML dan libxml2.
XQSharp : Mendukung XQuery, ekstensi ke XPath. Ditulis untuk .NET Framework.
xml-coreutils : toolkit Laird Breyer setara dengan GNU coreutils. Dibahas dalam esai yang menarik tentang apa yang harus dimasukkan oleh perangkat ideal.
xmldiff : Alat sederhana untuk membandingkan dua file xml.
xmltk : tampaknya tidak memiliki paket di debian, ubuntu, fedora, atau macports, belum memiliki rilis sejak 2007, dan menggunakan otomatisasi pembuatan non-portabel.
xml-coreutils tampaknya yang paling terdokumentasi dan paling berorientasi UNIX.
sumber
Ke daftar Joseph Holsten yang sangat baik, saya menambahkan skrip baris perintah xpath yang datang dengan perpustakaan Perl XML :: XPath. Cara hebat untuk mengekstrak informasi dari file XML:
sumber
-q -e
opsi. Contoh, dapatkan nilai atribut "paket" dari simpul "manifes" di "AndroidManifest.xml":xpath AndroidManifest.xml 'string(/manifest/@package)' 2> /dev/null
Ada juga
xml2
dan2xml
pasangan. Ini akan memungkinkan alat pengeditan string biasa untuk memproses XML.Contoh. q.xml:
xml2 < q.xml
xml2 < q.xml | grep textnode | sed 's!/foo!/bar/baz!' | 2xml
PS Ada juga
html2
/2html
.sumber
2xml
dapat dengan mudah membuat kembali XML darixml2
output parsial (difilter) .cat foo.xml | xml2 | grep /bar | 2xml
- memberi Anda struktur yang sama seperti aslinya, tetapi semua elemen telah dilucuti kecuali elemen "bilah". Luar biasa.Anda dapat menggunakan xmllint:
Harus dibundel dengan sebagian besar distro, dan juga dibundel dengan Cygwin.
Lihat:
sumber
--xpath
argumen untukxmllint
: manpagez.com/man/1/xmllint--xpath
adalah tambahan yang cukup baru dan mis. Tidak dalam versi RHEL 6 darixmllint
.xmllint --xpath
diperkenalkan di libxml2 2.7.7 (tahun 2010).Jika Anda mencari solusi pada Windows, Powershell memiliki fungsionalitas bawaan untuk membaca dan menulis XML.
test.xml:
Script Powershell:
testNew.xml:
Sumber: /server/26976/update-xml-from-the-command-line-windows
sumber
xps $doc .root.one
xps $doc 'AppendChild("three")'
danxps $doc '.three.set_InnerText("And don't you forget it!")'
, yang jelas lebih rendah!Ada juga xmlsed & xmlgrep dari xmltools NetBSD!
http://blog.huoc.org/xmltools-not-dead.html
sumber
Tergantung pada apa yang ingin Anda lakukan.
XSLT mungkin cara yang harus dilakukan, tetapi ada kurva belajar. Coba xsltproc dan perhatikan bahwa Anda dapat memberikan parameter.
sumber
Ada juga
saxon-lint
dari command line dengan kemampuan untuk menggunakan XPath 3.0 / XQuery 3.0. (Alat baris perintah lainnya menggunakan XPath 1.0).CONTOH:
http / html:
xml:
sumber
D. Bohdan mengelola repo GitHub open source yang menyimpan daftar alat baris perintah untuk alat teks terstruktur, ada bagian untuk alat XML / HTML:
https://github.com/dbohdan/structured-text-tools#xml-html
sumber
XQuery mungkin solusi yang bagus. Ini (relatif) mudah dipelajari dan merupakan standar W3C.
Saya akan merekomendasikan XQSharp untuk prosesor baris perintah.
sumber
Saya pertama kali menggunakan xmlstarlet dan masih menggunakannya. Ketika query menjadi sulit, saya perlu XML ini xpath2 dan XQuery fitur dukungan yang saya beralih ke xidel http://www.videlibri.de/xidel.html
sumber
Grep Setara
Anda dapat mendefinisikan fungsi bash, katakan "xp" ("xpath") yang membungkus beberapa kode python3. Untuk menggunakannya Anda perlu menginstal python3 dan python-lxml. Manfaat:
Mudah dan kuat untuk digunakan seperti ini:
xp () terlihat seperti ini:
Sed Setara
Pertimbangkan untuk menggunakan xq yang memberi Anda kekuatan penuh dari "bahasa pemrograman" jq. Jika Anda memiliki python-pip diinstal, Anda dapat menginstal xq dengan pip install yq , maka dalam contoh di bawah ini kami mengganti "Simpan Akun" dengan "Simpan Akun 2":
sumber
JEdit memiliki plugin yang disebut "XQuery" yang menyediakan fungsionalitas query untuk dokumen XML.
Tidak cukup baris perintah, tetapi berhasil!
sumber
grep(1)
.