/ / Xmlstarlet 1.6.1 - xml, xml-namespaces, wildfly-8, xmlstarlet के साथ नेमस्पेस के साथ एक्सएमएल अपडेट करना

Xmlstarlet 1.6.1 - xml, xml-namespaces, wildfly-8, xmlstarlet के साथ नेमस्पेस के साथ एक्सएमएल अपडेट करना

मैं 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+)।