2016-05-24 4 views
0

Ich versuche, die Host-Slave.xml aus einer Wildfly-Cluster-Konfiguration mit Xmlstarlet zu aktualisieren.Aktualisieren von XML mit Namespace mit xmlstarlet 1.6.1

Ich verwende die folgende Erklärung ab:

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" Wildfly\wildfly-8.2.0.Final\WildFly-HOST\configuration\host-slave.xml 

Die Namespace-Definition in xml:

<host name="172.16.1.11" xmlns="urn:jboss:domain:2.2" > 

Der Teil des XML möchte ich ändern:

<security-realm name="UndertowRealm"> 
    <server-identities> 
     <ssl> 
      <keystore path="D:\wildfly-8.2.0.Final\ssl\wildfly.keystore" keystore-password="rsaddbTsadYvvMXZ" alias="wildfly" /> 
     </ssl> 
    </server-identities> 
</security-realm> 

Aber wenn Ich lösche die Namespace-Definition aus der XML-Datei und verwende die folgende Anweisung:

Es funktioniert wie erwartet, so ist es kein Problem mit XPATH. Da ich nicht weiß, was mit Wildfly passiert, wenn ich die Namespace-Deklaration lösche, möchte ich es behalten.

Antwort

0

Das Problem ist, dass Sie den angegebenen Präfix (my, die Sie richtig abgebildet auf den Standard-Namespace-URI) zu verweisen Element in diesem Namensraum in Ihrem XPath, zum Beispiel verwenden müssen:

/my:security-realm[@name='UndertowRealm']/my:server-identities/my:ssl/my:keystore/@path 

Grundsätzlich Alle Elemente ohne Präfix innerhalb von Elementen, für die der Standardnamespace deklariert ist, werden im gleichen Standardnamespace berücksichtigt. Daher muss mit dem Präfix my darauf verwiesen werden.

+0

Funktioniert wie ein Charme, danke !! –

0

Ab Version 1.2.1 Sie de Standard-Namespace _
(Drop das -N Argument) verwenden können

xml ed -u "/_:security-realm[@name='UndertowRealm']/_:server-identities/_:ssl/_:keystore/@path" -v "test" Wildfly\wildfly-8.2.0.Final\WildFly-HOST\configuration\host-slave.xml 

Wie here erklärt:

1,3. Eine praktikablere Lösung

XML-Dokumente können auch verschiedene Namespace-Präfixe für jedes Element im Dokument verwenden. Um Namespaces mit einem höheren Wert von zu behandeln, verwendet XMLStarlet (Versionen 1.2.1+) die Namespacepräfixe , die für das Stammelement des Eingabedokuments deklariert sind. Der Standard-Namespace wird an die Präfixe "_" und "DEFAULT" gebunden (in den Versionen 1.5.0+).