मैं xmlstarlet के साथ एक वाइल्डफ्लाई क्लस्टर कॉन्फ़िगरेशन से host-slave.xml को अद्यतन करने का प्रयास कर रहा हूं।
मैं निम्नलिखित कथन का उपयोग कर रहा हूं:
xml ed -N my=urn:jboss:domain:2.2 -u "_:host/management/security-realms/security-realm[@name="UndertowRealm"]/server-identities/ssl/keystore/@path" -v "test" Wildflywildfly-8.2.0.FinalWildFly-HOSTconfigurationhost-slave.xml
एक्सएमएल में नेमस्पेस परिभाषा:
<host name="172.16.1.11" xmlns="urn:jboss:domain:2.2" >
एक्सएमएल का हिस्सा मैं बदलना चाहता हूं:
<security-realm name="UndertowRealm">
<server-identities>
<ssl>
<keystore path="D:wildfly-8.2.0.Finalsslwildfly.keystore" keystore-password="rsaddbTsadYvvMXZ" alias="wildfly" />
</ssl>
</server-identities>
</security-realm>
लेकिन अगर मैं xml से नेमस्पेस परिभाषा हटा देता हूं, और निम्न कथन का उपयोग करता हूं:
xml ed -u ":host/management/security-realms/security-realm[@name="UndertowRealm"]/server-identities/ssl/keystore/@path" -v "test" Wildflywildfly-8.2.0.FinalWildFly-HOSTconfigurationhost-slave.xml
यह अपेक्षित के रूप में काम करता है, इसलिए यह XPATH के साथ कोई समस्या नहीं है। जैसा कि मुझे नहीं पता कि जंगली उड़ान के साथ क्या होता है यदि मैं नेमस्पेस घोषणा हटा देता हूं, तो मैं इसे रखना चाहता हूं।
उत्तर:
जवाब के लिए 0 № 1समस्या यह है कि आपको घोषित उपसर्ग का उपयोग करने की आवश्यकता है (my
, जिसे आपने डिफ़ॉल्ट नामस्थान यूआरआई में सही ढंग से मैप किया है) उदाहरण के लिए अपने XPath में उस नामस्थान में संदर्भ तत्व के लिए:
/my:security-realm[@name="UndertowRealm"]/my:server-identities/my:ssl/my:keystore/@path
असल में, उपसर्ग के बिना सभी तत्व, तत्व के भीतर जहां डिफ़ॉल्ट नामस्थान घोषित किया जाता है, को उसी डिफ़ॉल्ट नामस्थान में माना जाता है, इसलिए उपसर्ग का उपयोग करके संदर्भित किया जाना चाहिए my
.
जवाब के लिए 0 № 2
संस्करण 1.2.1 से शुरू करना आप डिफ़ॉल्ट नामस्थान का उपयोग कर सकते हैं _
(गिराओ -N
तर्क)
xml ed -u "/_:security-realm[@name="UndertowRealm"]/_:server-identities/_:ssl/_:keystore/@path" -v "test" Wildflywildfly-8.2.0.FinalWildFly-HOSTconfigurationhost-slave.xml
यथा व्याख्यायित यहाँ:
1.3। एक और सुविधाजनक समाधान
एक्सएमएल दस्तावेज विभिन्न नामस्थान का भी उपयोग कर सकते हैंउपसर्ग, किसी भी पर दस्तावेज़ में तत्व। अधिक से अधिक नामस्थानों को संभालने के लिए आसानी से, XMLStarlet (संस्करण 1.2.1+) नामस्थान उपसर्ग का उपयोग करेंगे इनपुट दस्तावेज़ के मूल तत्व पर घोषित किया गया। डिफ़ॉल्ट नामस्थान उपसर्ग "_" और "DEFAULT" (संस्करणों में) से बाध्य होगा 1.5.0+)।