Xml
Baustelle: Dieser Artikel ist eine Baustelle. Das heißt, jemand hat sich dieses Artikels angenommen und überarbeitet ihn gerade. |
XML steht für Extensible Markup Language. Es ist eine Syntax, die in einer Textdatei abgelegt, sowohl von Menschen als auch Maschinen und Programmen lesbar ist. Sie ist sehr verbreitet und stellt eine Art Datenbank dar. Das HTML Format ist mit ihr verwandt.
In dieser Wikiseite sollen erst einmal einige Basics, darunter wie man von der Shell auf eine XML-Datei zugreift, diese ausließt (parsing) und auch modifiziert, aufgezeigt werden.
Es sei auch darauf hingewiesen, dass die Shell nicht die leistungsstärkste Herangehensweise an die XML Programmierung ist, doch fürs Anfangen und die Verwaltung kleinerer Datensätze ist es ausreichend.
Beispiel einer XML Datei
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<verzeichnis>
<titel>Schweiz</titel>
<Kanton name="Genf">
<Stadt Einwohnerzahl="200000">Genf</Stadt>
<Stadt>Vernier</Stadt>
</Kanton>
<Kanton name="Waadt">
<Stadt>Lausanne</Stadt>
</Kanton>
</verzeichnis>
Knoten, die hier die Struktur ergeben, können Attribute enthalten, wie hier im Beispiel z.B. name="Genf", und enthalten Elemente, wie beispielsweise Schweiz, Genf und Vernier. Doch statt bzw. zusätzlich zu Werten können neue Knoten als Elemente angelegt werden.
Den Aufbau bzw. die Struktur der Datei ließe sich auch, die Elemente enthaltend, als Absolutpfad ausgehend von der Wurzel (Rootebene) /, anzeigen.
user@debian:~$ xmlstarlet el datei.xml
verzeichnis
verzeichnis/titel
verzeichnis/Kanton
verzeichnis/Kanton/Stadt
verzeichnis/Kanton/Stadt
verzeichnis/Kanton
verzeichnis/Kanton/Stadt
Damit geht es nun fließend über in die Verwendung des xpath Wergzeuges für XML.
Einige aus den Standardrepositories verfügbare Programme zur XML Bearbeitung
root@debian:~# apt-get install libxml2-utils xmlstarlet
Beispiele
Abruf Elemente zu einem String, hier zu "Stadt":
user@debian:~$ xmllint --xpath "//Stadt/text()" datei.xml
Zählen der Elemente z.B. die Anzahl der Einträge mit "Stadt"
user@debian:~$ xmllint --xpath "count(//Stadt)" datei.xml
An die XML Datei den Kanton Thurgau hinzufügen
user@debian:~$ xmlstarlet ed --inplace -s "/verzeichnis" -t elem -n Kanton -i "/verzeichnis/Kanton[last()]" -t attr -n name -v Thurgau datei.xml
Bewohnerzahl des Kantons Thurgau als Attribut anfügen
user@debian:~$ xmlstarlet ed --inplace -i "/verzeichnis/Kanton[last()]" -t attr -n Einwohnerzahl -v 1025000 datei.xml
oder
user@debian:~$ xmlstarlet ed --inplace -i "//Kanton[3]" -t attr -n Einwohnerzahl -v 1025000 datei.xml
oder
user@debian:~$ xmlstarlet ed -i "/verzeichnis/Kanton[@name='Thurgau']" -t attr -n Einwohnerzahl -v 1025000 datei.xml