2012-08-15 11 views
16

मैं इस वाक्य रचना कई स्थानों को देखा है (जैसे, here):xmllint अज्ञात विकल्प '--xpath'

xmllint --xpath '/plist/array/string/text()' tmp.xml, एक xpath चयनकर्ता का उपयोग करके एक विशेष XML नोड खोज करते हैं। हालांकि, मुझे अपनी मशीन (मैक ओएस एक्स हिम तेंदुए) पर निष्पादित करने का प्रयास करते समय त्रुटि Unknown option --xpath त्रुटि मिल रही है।

xmllint के लिए आदमी पृष्ठ पर और अधिक बारीकी से देख रहे हैं, मुझे नहीं --xpath विकल्प दस्तावेज ...

I Am बस पूरी तरह से कुछ यहाँ याद आ रही?

+1

मैं भी नहीं '--xpath' विकल्प मिल सकता है (मेरे लिनक्स बॉक्स पर) लेकिन मेरे मामले में 'xmllint' इस विकल्प के बारे में जानता है:' xmllint | grep xpath' वापसी '--xpath expr: XPath अभिव्यक्ति का मूल्यांकन करें, inply --noout'। हमें 'xmllint --version' कमांड के आउटपुट दिखाएं। हो सकता है कि इस प्रोग्राम को XPath समर्थन के साथ/या संकलित किया जाना चाहिए? .. –

+0

@ steve.sims उत्तर [इस प्रश्न] का जवाब देखें (http://stackoverflow.com/questions/11611385/get-value-from-an-attribute- xmllint का उपयोग कर) xmllint के पुराने संस्करणों का उपयोग करने के लिए जो --xpath तर्क का समर्थन नहीं करते हैं। – mmigdol

उत्तर

4

आह, हाँ, libxml2 के पुराने संस्करण के साथ एक समस्या होनी चाहिए।

मैकपोर्ट्स के माध्यम से libxml2 (v2.7.8) को अद्यतन करने से समस्या ठीक हो गई है।

+6

--xpath विकल्प –

1

यदि आप मैक पर कमांड लाइन से plist फ़ाइलों को हेरफेर करना चाहते हैं, तो PlistBuddy का उपयोग करें।

उदाहरण के लिए, यदि आप एक खोल स्क्रिप्ट में बात इस तरह का कर सकते हैं:

BUNDLE_ID=`/usr/libexec/PlistBuddy -c 'Print :CFBundleIdentifier' Info.plist` 
echo $BUNDLE_ID 

यह बहुत शक्तिशाली है, तो आप/जोड़ सकते हैं सरणियों और शब्दकोशों के आइटम भी हटाना बंद या अनुक्रमित मूल्यों को देखने, कॉपी/अन्य फ़ाइलों को मर्ज/आयात करें, आदि पूर्ण जानकारी के लिए /usr/libexec/PlistBuddy -h देखें।

5

कुछ लोगों के लिए अद्यतन करना एक विकल्प नहीं है। आपको दिए गए संस्करण के साथ काम करना है, जो कि किसी अन्य टीम द्वारा स्थापित है और आप इसके साथ जाते हैं।

आप --shell के माध्यम से कोशिश कर सकते हैं:

xmllint --shell tmp.xml << EOF 
'/plist/array/string/text()' 
EOF 
+1

का समर्थन करने के लिए libxml के संस्करण को अद्यतन करने के लिए कैसे करें धन्यवाद @Trompa, यह दर्शाता है कि यह पुराने xmllint के साथ संभव है; मैंने 1-लाइन में टॉमकैट HTTP श्रोता बंदरगाह निकालने के लिए xmllint --shell कमांड 'बिल्ली' का उपयोग किया: 'echo" cat //Connector[@protocol='org.apache.coyote.http11.Http11NioProtocol']/@ बंदरगाह "| xmllint --shell /apache-tomcat/conf/server.xml | awk -F \ "'/ =/{प्रिंट $ 2;}'' –

5
xmllint --shell tmp.xml <<<'xpath /plist/array/string/text()' 

आप stdin पढ़ने के लिए xmllint बनाने के लिए की जरूरत है:

cat /tmp/tmp.xml | xmllint --shell <(cat) <<<'xpath /plist/array/string/text()'