xmlstarlet
Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:
Ubuntu 24.04 Noble Numbat
Du möchtest den Artikel für eine weitere Ubuntu-Version testen? Mitarbeit im Wiki ist immer willkommen! Dazu sind die Hinweise zum Testen von Artikeln zu beachten.
Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:
XMLstarlet 🇬🇧 ist ein Kommandozeilen-Programm, mit dem XML-Dokumente transformiert, durchsucht, validiert und editiert werden können. XMLstarlet unterstützt die Berechnung von XPath-Ausdrücken. Die Software ist in C geschrieben und verwendet libxml2 🇬🇧.
Installation¶
XMLstarlet kann direkt aus den Quellen installiert werden [1].
xmlstarlet
Befehl zum Installieren der Pakete:
sudo apt-get install xmlstarlet
Oder mit apturl installieren, Link: apt://xmlstarlet
Das Programm kann dann sofort gestartet werden.
Benutzung¶
Die allgemeine Syntax von xmlstarlet lautet:
xmlstarlet [OPTIONEN] BEFEHL [BEFEHLSOPTIONEN] [XML-DATEI ...]
Wenn keine XML-Datei
angegeben wird, liest das Programm von der Standardeingabe.
Befehle¶
Das Programm kennt unter anderem die folgenden Befehle:
Auswahl von Befehlen | |
Befehl | Beschreibung |
ed | Editieren von XML-Dokumenten |
sel | Filtern bzw. Durchsuchen von XML-Dokumenten |
tr | Transformieren von XML-Dokumenten |
val | Validierung von XML-Dokumenten |
fo | Formatierung von XML-Dokumenten |
el | Zeigt die Elementstruktur eines XML-Dokuments |
Weitere Befehle und die Optionen findet man auf der Manpage von XMLstarlet.
Beispiele¶
Im Folgenden wird angenommen, dass die Datei simpsons.xml diesen Aufbau hat:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <simpsons lang="de"> <figur> <name>Homer Simpson</name> <alter>39</alter> <kinder> <kind>Bart</kind> <kind>Lisa</kind> <kind>Maggie</kind> </kinder> <jobs> <Job>technischer Überwacher im KKW</Job> <Job>Astronaut</Job> <Job>Fett-Verkäufer</Job> </jobs> <hobbys> <Hobby>Bowling</Hobby> <Hobby>Angeln</Hobby> </hobbys> <freunde> <Freund>Carl</Freund> <Freund>Lenny</Freund> </freunde> </figur> <figur> <name>Marge Simpson </name> <alter>34</alter> <kinder> <kind>Bart</kind> <kind>Lisa</kind> <kind>Maggie</kind> </kinder> <jobs> <Job>Hausfrau</Job> <Job>KKW Angestellte</Job> <Job>Polizistin</Job> </jobs> <hobbys> <Hobby>Malen</Hobby> <Hobby>Zeichnen</Hobby> </hobbys> <freunde> </freunde> </figur> </simpsons> |
sel¶
Syntax¶
xmlstarlet sel GLOBALE_OPTIONEN {TEMPLATE} [ XML-DATEI ... ]
Für {TEMPLATE}
benutzt man -t OPTIONEN
, wobei einige OPTIONEN in folgender Tabelle aufgeführt sind.
Auswahl von Optionen | |
Option | Beschreibung |
-c XPATH | Gibt eine Kopie des XPATH-Ausdrucks aus |
-v XPATH | Gibt den Wert des XPATH-Ausdrucks zurück |
-m XPATH | passt auf den XPATH-Ausdruck |
Eine Übersicht der Optionen erhält man mit xml sel --help
.
Beispiele¶
Um eine Kopie der Datei simpsons.xml auszugeben kann man folgenden Befehl benutzen
xmlstarlet sel -t -c "/" simpsons.xml
Um nur die Elemente ohne die Namen auszugeben, benutzt man -v
xmlstarlet sel -t -v "/" simpsons.xml
Homer Simpson 39 Bart Lisa Maggie technischer Überwacher im KKW Astronaut Fett-Verkäufer Bowling Angeln Carl Lenny Marge Simpson 34 Bart Lisa Maggie Hausfrau KKW Angestellte Polizistin Malen Zeichnen
Die Namen aller Simpsons in der Datei gibt
xmlstarlet sel -t -v "//name" simpsons.xml
aus:
Homer Simpson Marge Simpson
Die Jobs von Homer erhält man mit
xmlstarlet sel -t -v "/simpsons/figur[1]/jobs" simpsons.xml
technischer Überwacher im KKW Astronaut Fett-Verkäufer
oder alternativ mit
xmlstarlet sel -t -v "//figur[name=\"Homer Simpson\"]/jobs" simpsons.xml
Zugriff auf Attribute erhält man mit @
xmlstarlet sel -t -v "//@lang" simpsons.xml
de
ed¶
Syntax¶
xmlstarlet ed GLOBALE_OPTIONEN {AKTION} [XML-DATEI ...]
Einige AKTIONEN
sind in folgender Tabelle aufgeführt_
Auswahl von Aktionen | |
Aktion | Beschreibung |
-d XPATH | Löscht XPATH. |
-i XPATH -t elem|text|attr -n NAME [-v WERT] | Fügt etwas mit NAME und WERT an der Stelle XPATH ein. |
-s XPATH -t elem|text|attr -n NAME [-v WERT] | Erstellt einen Unterknoten mit NAME und WERT an der Stelle XPATH. |
-r XPATH -v NAME | Benennt XPATH um |
-u XPATH -v WERT | Aktualisiert den Wert von XPATH |
Eine Übersicht der Optionen erhält man mit xml ed --help
.
Beispiele¶
Um den letzten Figur-Knoten zu löschen (Option -d
) kann man
xmlstarlet ed -d "//figur[last()]" simpsons.xml
nutzen:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <simpsons lang="de"> <figur> <name>Homer Simpson</name> <alter>39</alter> <kinder> <kind>Bart</kind> <kind>Lisa</kind> <kind>Maggie</kind> </kinder> <jobs> <Job>technischer Überwacher im KKW</Job> <Job>Astronaut</Job> <Job>Fett-Verkäufer</Job> </jobs> <hobbys> <Hobby>Bowling</Hobby> <Hobby>Angeln</Hobby> </hobbys> <freunde> <Freund>Carl</Freund> <Freund>Lenny</Freund> </freunde> </figur> </simpsons> |
Um die job-Knoten in "beruf" umzubenennen benutzt man
xmlstarlet ed -r "/simpsons/*/jobs" -v "beruf" simpsons.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <simpsons lang="de"> <figur> <name>Homer Simpson</name> <alter>39</alter> <kinder> <kind>Bart</kind> <kind>Lisa</kind> <kind>Maggie</kind> </kinder> <beruf> <Job>technischer Überwacher im KKW</Job> <Job>Astronaut</Job> <Job>Fett-Verkäufer</Job> </beruf> <hobbys> <Hobby>Bowling</Hobby> <Hobby>Angeln</Hobby> </hobbys> <freunde> <Freund>Carl</Freund> <Freund>Lenny</Freund> </freunde> </figur> <figur> <name>Marge Simpson </name> <alter>34</alter> <kinder> <kind>Bart</kind> <kind>Lisa</kind> <kind>Maggie</kind> </kinder> <beruf> <Job>Hausfrau</Job> <Job>KKW Angestellte</Job> <Job>Polizistin</Job> </beruf> <hobbys> <Hobby>Malen</Hobby> <Hobby>Zeichnen</Hobby> </hobbys> <freunde> </freunde> </figur> </simpsons> |
Um einen Wert zu aktualisieren kann man
xmlstarlet ed -u "/simpsons/figur[1]/alter" -v "40" simpsons.xml
nutzen:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <simpsons lang="de"> <figur> <name>Homer Simpson</name> <alter>40</alter> <kinder> <kind>Bart</kind> <kind>Lisa</kind> <kind>Maggie</kind> </kinder> <jobs> <Job>technischer Überwacher im KKW</Job> <Job>Astronaut</Job> <Job>Fett-Verkäufer</Job> </jobs> <hobbys> <Hobby>Bowling</Hobby> <Hobby>Angeln</Hobby> </hobbys> <freunde> <Freund>Carl</Freund> <Freund>Lenny</Freund> </freunde> </figur> <figur> <name>Marge Simpson </name> <alter>34</alter> <kinder> <kind>Bart</kind> <kind>Lisa</kind> <kind>Maggie</kind> </kinder> <jobs> <Job>Hausfrau</Job> <Job>KKW Angestellte</Job> <Job>Polizistin</Job> </jobs> <hobbys> <Hobby>Malen</Hobby> <Hobby>Zeichnen</Hobby> </hobbys> <freunde> </freunde> </figur> </simpsons> |
Ein Element hinzufügen geht mit
xmlstarlet ed -s "/simpsons/figur[1]/jobs" -t elem -n "job" -v "Einschienenbahn-Zugführer" simpsons.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <simpsons lang="de"> <figur> <name>Homer Simpson</name> <alter>39</alter> <kinder> <kind>Bart</kind> <kind>Lisa</kind> <kind>Maggie</kind> </kinder> <jobs> <Job>technischer Überwacher im KKW</Job> <Job>Astronaut</Job> <Job>Fett-Verkäufer</Job> <job>Einschienenbahn-Zugführer</job> </jobs> <hobbys> <Hobby>Bowling</Hobby> <Hobby>Angeln</Hobby> </hobbys> <freunde> <Freund>Carl</Freund> <Freund>Lenny</Freund> </freunde> </figur> <figur> <name>Marge Simpson </name> <alter>34</alter> <kinder> <kind>Bart</kind> <kind>Lisa</kind> <kind>Maggie</kind> </kinder> <jobs> <Job>Hausfrau</Job> <Job>KKW Angestellte</Job> <Job>Polizistin</Job> </jobs> <hobbys> <Hobby>Malen</Hobby> <Hobby>Zeichnen</Hobby> </hobbys> <freunde> </freunde> </figur> </simpsons> |
XMLstarlet kennt noch viele weitere Befehle und Optionen, zusätzliche Informationen entnimmt man dem XMLstarlet-Userguide 🇬🇧.
Links¶