ADMIN-Tipp: Xmlstarlet

Jede Woche erscheint in unserem Newsletter ein neuer ADMIN-Tipp. Eine Sammlung aller Tipps finden Sie im Archiv der ADMIN-Tipps.

Auf der Kommandozeile ist es schwierig, XML-Dateien zu verarbeiten. Das kleine Tool Xmlstarlet hilft dabei.

Seiner Unhandlichkeit zum Trotz haben sich XML-Formate als Konfigurationsdateien für viele Softwarekomponenten etabliert, zum Beispiel bei beim Java-Servern wie Tomcat und JBoss, aber auch bei der Konfiguration von Virtualisierungskomponenten wie KVM und Libvirt. Mit klassischen Unix-Tools wie Grep und Awk lassen sich XML-Dateien nur umständlich verarbeiten. Besser geht es mit einem Tool namens Xmlstarlet, mit dessen Hilfe der Anwender XML-Dateien durchsuchen und sogar verändern kann.

Der Quellcode findet sich unter http://xmlstar.sourceforge.net, das Programm ist aber auch in den Paket-Repositories vieler Linux-Distributionen enthalten. Ohne weitere Parameter aufgerufen, gibt das Tool einen Überblick seiner Funktionen, die über Unterbefehle erreichbar sind: "ed" für Editieren, "sel" für die Suche (Select), "tr" für Transformationen und so weiter. Mit dem jeweiligen Unterbefehl und "--help" aufgerufen, gibt Xmlstarlet genauere Anweisungen.

Einen Überblick über die Struktur einer XML-Datei gibt der folgende Befehl aus:

xmlstarlet el -a libvirt.xml

Wer zusätzlich noch die enthaltenen Attribute sehen will - was zum Beispiel bei der Libvirt sinnvoll ist, weil die XML-Elemente ansonsten leer sind - verwendet den Aufruf xmlstarlet el -v libvirt.xml.

Mit dem Select-Aufruf und dem Parameter -t lassen sich XPath-Ausdrückt verwenden, um gezielt einzelne Elemente zu finden. Einzelne Attribute des gefundenen Elements gibt Xmlstarlet aus, wenn man sie mit einem At-Zeichen aufführt:

xmlstarlet sel -t -m "//disk" -v "@device" libvirt.xml

Allerdings hängt Xmlstarlet hier die Devices einfach hintereinander. Etwas komplizierter ist es, sie zu trennen, denn dazu benötigt man einerseits die Concat-Funktion und andererseits einen Zeilenumbruch:

xmlstarlet sel -t -m "//disk" -v "concat(@device,'
')" libvirt.xml
cdrom
disk

Der Fantasie sind bei solchen Abfragen Grenzen nur durch die Xpath-Syntax gesetzt. 

Mit "ed" kann Xmlstarlet XML-Dateien auch editieren, mit "c14n" in ein kanonisches XML-Format umwandeln. Mehr Informationen bietet die PDF-Dokumentation unter http://xmlstar.sourceforge.net/doc/UG/xmlstarlet-ug.pdf. Wer das Tool einfach mal ausprobieren möchte, kann sich nach der Installation ein Verzeichnis-Listing im XML-Format mit "xmlstarlet ls" ausgeben lassen. 

07.11.2012

Ähnliche Artikel

comments powered by Disqus

Artikel der Woche

Eigene Registry für Docker-Images

Wer selber Docker-Images herstellt, braucht auch eine eigene Registry. Diese gibt es ebenfalls als Docker-Image, aber nur mit eingeschränkter Funktionalität. Mit einem Auth-Server wird daraus ein brauchbares Repository für Images. (mehr)
Einmal pro Woche aktuelle News, kostenlose Artikel und nützliche ADMIN-Tipps.
Ich habe die Datenschutzerklärung gelesen und bin einverstanden.

Konfigurationsmanagement

Ich konfiguriere meine Server

  • von Hand
  • mit eigenen Skripts
  • mit Puppet
  • mit Ansible
  • mit Saltstack
  • mit Chef
  • mit CFengine
  • mit dem Nix-System
  • mit Containern
  • mit anderer Konfigurationsmanagement-Software

Google+

Ausgabe /2019