Próbuję wyodrębnić wartość węzła z pom.xml:Native polecenie powłoki ustawić, aby wyodrębnić wartości węzła z XML
<?xml version="1.0" encoding="UTF-8"?>
<project>
<parent>
<groupId>org.me.labs</groupId>
<artifactId>my-random-project</artifactId>
<version>1.5.0</version>
</parent>
...
</project>
muszę wyodrębnić artifactId oraz wersję z użyciem XML polecenie powłoki. Mam następujące wymagania/obserwacje:
- Skrypt powłoki zostanie wykonany w pliku zespołu kompilacji, którego używamy w pracy, więc im mniejszy skrypt, tym lepiej.
- Ponieważ będzie używany na wielu systemach (zazwyczaj RHEL5), szukam czegoś, co może działać natywnie na domyślnych obrazach.
- Tagi takie jak mogą wystąpić w innym miejscu w pom, więc nie mogę po prostu awk dla tych tagów.
Próbowałem następujące:
xpath
działa na moim Mac, ale nie jest domyślnie dostępne na maszynach RHEL. Podobnie jak w przypadkuxmllint --xpath
, które, jak sądzę, są dostępne tylko w późniejszych wersjachxmllint
, których nie mam i których nie mogę wymusić.xmllint --pattern
wydawało się obiecujące, ale nie mogę uzyskać wyjścia zxmllint --pattern '//project/parent/version' pom.xml
(wypisuje cały plik XML) lubxmllint --stream --pattern '//project/parent/version' pom.xml
(brak danych wyjściowych).
Zdaję sobie sprawę, że jest to powszechne pytanie na SO, ale powyższe punkty są powodem, dla którego nie mogę wykorzystać tych odpowiedzi. TIA za twoją pomoc.
Alternatywnie można użyć następującego: 'echo" cat // * [local-name() = 'project']/* [local-name() = 'parent']/* [local-name() = 'wersja "]/text()" | xmllint --shell pom.xml | sed '/^\ />/d'', więc musisz tylko" sed "-usunąć powłokę xmllint stuff –
Jeśli masz wystarczająco dużo' xmllint', to nie potrzebujesz rzeczy '--shell' : 'xmllint --xpath/* [nazwa lokalna() ==" projekt "]/... 'pom.xml'. Część 'local-name()' była tym, czego mi brakowało w moim skrypcie. – Guss