/ / Den Wert eines XML-Elements abhängig vom Wert eines anderen Elements im Baum ändern - xml, xmlstarlet

Ändern des Werts eines XML-Elements in Abhängigkeit vom Wert eines anderen Elements in der Baumstruktur - xml, xmlstarlet

Ich habe ein sehr große (100+ Megabyte unkomprimierte) XML-Datei, die Datensätze speichert, und ich versuche, einige Werte selektiv zu ändern.

Zum Beispiel sagen sample.xml sieht aus wie das:

<objects>
<object>
<name>Foo</name>
<constant1>10</constant1>
<constant2>20</constant2>
</object>
<object>
<name>Bar</name>
<constant1>15</constant1>
<constant2>40</constant2>
</object>
<objects>

Jetzt möchte ich den Wert von ändern <constant1> bis 18, aber nur für das Objekt, dessen Name Element hat einen Wert Foo. Ich habe an der XML Starlet-Dokumentation gestochert, aber es ist Artikel zum Bearbeiten Es gibt nur Beispiele dafür, wie man Attribute von Elementen direkt im Baum sucht, es sei denn, ich vermisse etwas ...

Antworten:

12 für die Antwort № 1

... Anscheinend bin ich ein Idiot; Wie in diese Antwort Sie können nach Elementwerten auf die gleiche Weise suchen, wie Sie nach Attributwerten suchen können. Der richtige Befehl wäre also:

xmlstarlet ed -u "//object[name="Foo"]/const1" -v 18 sample.xml

... Vorbehalt bei der Arbeit an wirklich großen Dateien: Ohne Ausgabeumleitung, xmlstarlet druckt auf stdout. Alle 100+ Megabyte an XML. Hoppla.