अनदेखी करने के लिए मैं xmllint --xpath
का उपयोग कर एक्सएमएल फ़ाइलें (Maven poms) की एक बड़ी संख्या संसाधित करने का प्रयास कर रहा हूँ। कुछ परीक्षण और त्रुटि के साथ मैं पता लगा यह अपेक्षा के अनुरूप काम नहीं कर रहा है कि इन फ़ाइलों में बुरा डिफ़ॉल्ट नाम स्थान घोषणा है, जो इस प्रकार है की वजह से:फोर्स xmllint बुरा defult xmlns
<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">
एक साधारण आदेश इस प्रकार है विफल रहता है:
$ echo $(xmllint --xpath '/project/modelVersion/text()' pom.xml)
XPath set is empty
मैं xmlns विशेषता से छुटकारा पाने के लिए, इस प्रकार मूल तत्व की जगह:
<project 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">
पिछला आदेश अपेक्षित आउटपुट देता है:
+०१२३५१६४१०$ echo $(xmllint --xpath '/project/modelVersion/text()' pom.xml)
4.0.0
सैकड़ों पोम फ़ाइलों को बदलना एक विकल्प नहीं है, खासकर जब से मैवेन स्वयं शिकायत नहीं करता है।
xmllint
के लिए खराब xmlns
के साथ फ़ाइल को संसाधित करने का कोई तरीका है?
अद्यतन
डेमियन के लिए धन्यवाद मैं कुछ प्रगति करने में सक्षम था:
$ (echo setns x=http://maven.apache.org/POM/4.0.0; echo 'xpath /x:project/x:modelVersion/text()';) | xmllint --shell pom.xml
/> setns x=http://maven.apache.org/POM/4.0.0
/> xpath /x:project/x:modelVersion/text()
Object is a Node Set :
Set contains 1 nodes:
1 TEXT
content=4.0.0
लेकिन यह काफी है कि मैं क्या जरूरत नहीं करता है। मेरे अनुवर्ती प्रश्न निम्नानुसार हैं:
क्या केवल पाठ मुद्रित करने का कोई तरीका है? मैं आउटपुट को उपरोक्त उदाहरण पर उपरोक्त उदाहरण
ऐसा लगता है कि उत्पादन लगभग 30 वर्णों के बाद छोटा हो जाता है। क्या पूरा आउटपुट प्राप्त करना संभव है? इस के साथ एसईडी
pom.xml
में दी गई साथxmllint --xpath
यह एक * बुरा * नाम स्थान नहीं है। यह एक नामस्थान है।आमतौर पर इसका अर्थ यह है कि आपको अपने XPath क्वेरी में नेमस्पेस का उपयोग करने की भी आवश्यकता है, लेकिन मैं आपको बताए जाने वाले टूल के विनिर्देशों से परिचित नहीं हूं। –
यह खराब है क्योंकि यह xmllint विफल होने का कारण बनता है :) इसके अलावा क्योंकि schmealocation गलत है। –
'xmllint नेमस्पेस' पर थोड़ा सा सरल खोज [इस सवाल] [http://stackoverflow.com/questions/8264134/xmllint-failing-to-properly-query-with-xpath) जो दो संभव दिखाना प्रतीत होता है * नामस्थान के साथ * काम करने के तरीके। और schemalocation सही प्रतीत होता है। यह कहता है कि यूआरआई 'http: // maven.apache.org/POM/4.0.0' द्वारा पहचाना गया स्कीमा यूआरएल' http: // maven.apache.org/maven-v4_0_0.xsd' पर स्थित हो सकता है और यह सच प्रतीत होता है। –