Saya ingin membaca pom.xml ('Project Object Model' dari Maven) dan mengekstrak informasi versi. Berikut ini sebuah contoh:
<?xml version="1.0" encoding="UTF-8"?><project
xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.mycompany</groupId>
<artifactId>project-parent</artifactId>
<name>project-parent</name>
<version>1.0.74-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>com.sybase.jconnect</groupId>
<artifactId>jconnect</artifactId>
<version>6.05-26023</version>
</dependency>
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>1.5.2</version>
</dependency>
<dependency>
<groupId>com.sun.jdmk</groupId>
<artifactId>jmxtools</artifactId>
<version>1.2.1</version>
</dependency>
<dependency>
<groupId>org.easymock</groupId>
<artifactId>easymock</artifactId>
<version>2.4</version>
</dependency>
</dependencies>
</project>
Bagaimana saya bisa mengekstrak versi '1.0.74-SNAPSHOT' dari atas?
Senang bisa melakukannya menggunakan sed bash scripting sederhana atau awk. Kalau tidak, python sederhana lebih disukai.
SUNTING
Paksaan
Kotak linux ada di lingkungan perusahaan jadi saya hanya bisa menggunakan alat yang sudah diinstal (bukan saya tidak bisa meminta utilitas seperti xml2, tapi saya harus melalui banyak red-tape). Beberapa solusi sangat baik (pelajari beberapa trik baru), tetapi mereka mungkin tidak berlaku karena lingkungan terbatas
daftar xml diperbarui
Saya menambahkan tag dependensi ke daftar asli. Ini akan menunjukkan beberapa solusi hacky mungkin tidak berfungsi dalam kasus ini
Distro
Distro yang saya gunakan adalah RHEL4
Jawaban:
xml2 dapat mengonversi xml ke / dari format berorientasi baris:
sumber
Cara lain: xmlgrep dan XPath:
Kerugian: lambat
sumber
xml_grep
Menggunakan
python
Menggunakan
xmlstarlet
Menggunakan
xmllint
sumber
cat (//x:version)[1]/text()
saat menggunakanxmllint
juga bekerja!Cara Clojure. Hanya membutuhkan jvm dengan file jar khusus:
Cara scala:
Cara asyik:
sumber
Berikut alternatif di Perl
Ini bekerja dengan contoh yang direvisi / diperluas dalam pertanyaan yang memiliki beberapa elemen "versi" pada kedalaman yang berbeda.
sumber
Cara hacky :
Mengandalkan lekukan yang benar dari yang dibutuhkan
<version>
sumber
<version>
hal.Kerjakan solusi satu-liner yang sangat canggung
Sed pada akhirnya sangat jelek tetapi saya tidak dapat mencetak teks dari node dengan mindom saja.
Perbarui dari _Vi :
Versi Python yang kurang rapi:
Perbarui dari saya
Versi lain:
sumber
Cara XSLT:
sumber
jika "Ada banyak tag versi di xml" maka Anda lebih baik melupakannya dengan "alat sederhana" dan regexps, itu tidak akan berhasil.
coba python ini (tidak ada dependensi):
sumber
Berikut ini adalah satu-liner menggunakan sed:
sumber
<version>
itu hanya bisa di dalam dependensi.Di sini, coba ini:
sumber
Saya tahu pertanyaan Anda mengatakan Linux, tetapi jika Anda perlu melakukan ini di Windows tanpa memerlukan alat pihak ke-3 sehingga Anda dapat memasukkannya ke dalam file batch, Powershell dapat mengekstrak setiap simpul dari file pom.xml Anda seperti itu :
sumber
The
-n
pilihan menghindari pencetakan garis yang tidak cocok; pertandingan pertama (/.../
) ada di baris sebelum yang berisi teks yang diinginkan; yangn
perintah melompat ke baris berikutnya, di manas
ekstrak info yang relevan melalui grup menangkap (\(...\)
), dan backreference (\1
).p
mencetak,q
berhenti.sumber
awk berfungsi dengan baik tanpa menggunakan alat tambahan.
cat pod.xml
cara sederhana dan mudah dibaca untuk mendapatkan nilai
<packaging>
tag:sumber