2016-06-30 2 views
1
<?xml version='1.0' encoding='UTF-8'?> 
<star ABC="90" ABCType="Catch" endDateTime="2020-12-30T23:59:59" startDateTime="2010-08-10T06:00:00" timePeriodInDays="1" xmlns="urn:xxx:dyn:xxx:version01">  
    <tpName>seg</tpName> 
    <Instance endDateTime="2016-06-08T00:01:00" 
       startDateTime="2016-06-08T00:01:00"> 
     <Id>PASS1</Id> 
    </Instance> 
    <Instance endDateTime="2016-06-10T00:00:00"  
       startDateTime="2016-06- 08T00:01:00"> 
     <Id>PASS2"</Id> 
    </Instance> 
</star> 

Ich bin neu in xmlstartlet. In dem obigen Code versuche ich, die startDateTime zu "AAAA" von Beispiel zu ändern, wo Id PASS1 ist. Ich habe versucht, die folgenden zu tun:xmlstarlet wie ein Attribut aktualisieren basierend auf Subelement Wert

xml ed -N w=urn:xxx:dyn:xxx:version01 -u "/w:star/w:Instance[@w:startDateTime"]/@w:startDateTime" -v "AAAA" 1.xml 

aber immer folgende Fehler:

Keiner der XPaths abgestimmt; Um einen Knoten im Standard-Namespace zu finden, verwenden Sie '' als Präfix (siehe Abschnitt 5.1 im Handbuch). Zum Beispiel Verwendung/: Knoten statt/Knoten

Antwort

0

Sie sollten nicht die Attribute in Ihrem XPath-Präfix müssen.

Try this:

xml ed -N w=urn:xxx:dyn:xxx:version01 -u "/w:star/w:Instance[w:Id='PASS1']/@startDateTime" -v "AAAA" 1.xml 

Ausgang:

<star xmlns="urn:xxx:dyn:xxx:version01" ABC="90" ABCType="Catch" endDateTime="2020-12-30T23:59:59" startDateTime="2010-08-10T06:00:00" timePeriodInDays= 
"1"> 
    <tpName>seg</tpName> 
    <Instance endDateTime="2016-06-08T00:01:00" startDateTime="AAAA"> 
    <Id>PASS1</Id> 
    </Instance> 
    <Instance endDateTime="2016-06-10T00:00:00" startDateTime="2016-06- 08T00:01:00"> 
    <Id>PASS2"</Id> 
    </Instance> 
</star> 
+0

Dank Daniel. Es funktioniert jetzt. Danke, dass Sie mir beigebracht haben, dass ich die Attribute in meinem XPath nicht voranstellen muss. – seema

+0

@seema - Gern geschehen. Können Sie diese Antwort akzeptieren, indem Sie auf das Häkchen (✅) daneben klicken? Vielen Dank! –

Verwandte Themen