मैं एक pom.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>
मैं एक का उपयोग कर XML से artifactId और संस्करण निकालने के लिए की जरूरत है खोल कमांड मेरे पास निम्नलिखित आवश्यकताएं/टिप्पणियां हैं:
- शैल स्क्रिप्ट एक बिल्ड असेंबली फ़ाइल के भीतर किया जाएगा जो हम काम पर उपयोग करते हैं, इसलिए स्क्रिप्ट जितनी छोटी होगी।
- चूंकि इसका उपयोग कई प्रणालियों (आमतौर पर आरएचईएल 5) पर किया जाएगा, इसलिए मैं कुछ ऐसी चीज ढूंढ रहा हूं जो डिफ़ॉल्ट छवियों पर मूल रूप से चल सके।
- जैसे टैग पोम में कहीं और हो सकते हैं, इसलिए मैं उन टैग्स के लिए बस अजीब नहीं हो सकता। अपने Mac पर
xpath
काम करता है, लेकिन RHEL मशीनों पर डिफ़ॉल्ट रूप से उपलब्ध नहीं है:
मैं निम्नलिखित की कोशिश की है। इसी प्रकार
xmllint --xpath
के लिए, जो मुझे लगता है केवलxmllint
के बाद के संस्करणों पर उपलब्ध है, जो मेरे पास नहीं है और लागू नहीं कर सकता है। xmllint --pattern
होनहार लग रहा था, लेकिन मैंxmllint --pattern '//project/parent/version' pom.xml
के बाहर एक आउटपुट प्राप्त नहीं कर पा रहे याxmllint --stream --pattern '//project/parent/version' pom.xml
(कोई उत्पादन) (पूरे एक्सएमएल प्रिंट)।
मुझे एहसास है कि यह SO पर एक आम प्रश्न है, लेकिन ऊपर दिए गए बिंदु इसलिए मैं उन उत्तरों का उपयोग नहीं कर सकता। आपकी मदद के लिए टीआईए।
वैकल्पिक रूप से, आप इसका उपयोग कर सकते हैं: 'echo "cat // * [local-name() =' project ']/* [स्थानीय-नाम() =' parent ']/* [स्थानीय-नाम() =' संस्करण ']/पाठ() "| xmllint --shell pom.xml | sed '/^\ />/d'', तो आपको केवल 'sed'-xmllint shell stuff –
को हटाने की आवश्यकता है यदि आपके पास हाल ही में पर्याप्त' xmllint' है, तो आपको '--shell' सामग्री की आवश्यकता नहीं है : 'xmllint --xpath/* [स्थानीय-नाम() ==" प्रोजेक्ट "]/... 'pom.xml'। 'स्थानीय-नाम()' भाग वह था जो मैं अपनी लिपि के लिए खो रहा था। – Guss