Raspberry Pi B+: Wie kann das Schweizer Taschenmesser xmlstarlet 1.3.1und 1.6.0 installiert und verwendet werden?

Für die Bearbeitung von XML Dokumenten eignet sich gut das Programm xmlstarlet.
xmlstarlet

Das xmlstarlet, kann mit seinen Abhängigkeiten
xmlstarlet wie folgt auf dem rPi installiert werden:

sudo apt-get install xmlstarlet

Nun kann die installierte Version gescheckt werden:
pi@bplus ~ $ xmlstarlet --version
1.3.1
compiled against libxml2 2.8.0, linked with 20800
compiled against libxslt 1.1.26, linked with 10126

oder die Hilfe ausgegeben werden:

pi@bplus ~ $ xmlstarlet --help
XMLStarlet Toolkit: Command line utilities for XML
Usage: xmlstarlet [] []
where is one of:
ed (or edit) - Edit/Update XML document(s)
sel (or select) - Select data or query XML document(s) (XPATH, etc)
tr (or transform) - Transform XML document(s) using XSLT
val (or validate) - Validate XML document(s) (well-formed/DTD/XSD/RelaxNG)
fo (or format) - Format XML document(s)
el (or elements) - Display element structure of XML document
c14n (or canonic) - XML canonicalization
ls (or list) - List directory as XML
esc (or escape) - Escape special XML characters
unesc (or unescape) - Unescape special XML characters
pyx (or xmln) - Convert XML into PYX format (based on ESIS - ISO 8879)
p2x (or depyx) - Convert PYX into XML are:
--version - show version
--help - show help
Wherever file name mentioned in command help it is assumed
that URL can be used instead as well.

Type: xmlstarlet --help for command help

XMLStarlet is a command line toolkit to query/edit/check/transform
XML documents (for more information see http://xmlstar.sourceforge.net/)

Hier nun die Anleitung, um die aktuellste Version 1.6.0 selbst zu erstellen:

# die alte Version wieder entfernen
sudo apt-get remove xmlstarlet
# nötige Abhängigkeiten installieren
sudo apt-get install libxslt-dev libxml2-dev xml2

# neueste Version downloaden
wget http://sourceforge.net/projects/xmlstar/files/latest/download/xmlstarlet-1.6.0.tar.gz
# archiv auspacken
gunzip xmlstarlet-1.6.0.tar.gz
tar xvf xmlstarlet-1.6.0.tar
# in das erstellte Verzeichnis wechseln
cd xmlstarlet-1.6.0/
# Version configurieren
./configure
# Version compilieren
sudo make
# Version installieren
sudo make install

Nun ist die Version nach /usr/local/bin/xml erstellt und ein

/usr/local/bin/xml --version
gibt die Version 1.6.0 aus:

Bildschirmfoto 2014-08-09 um 23.32.52

Damit nicht jedesmal der Pfad mit angegeben werden muss, den Path noch exportieren. Dazu in .bashrc oder für alle User in /etc/profile den Pfad eintragen mit:

nano .bashrc
# xmlstarlet Path am Ende der Datei ergänzen
XMLSTAR="/usr/local/bin/xml"
export PATH=$PATH:$XMLSTAR

Dann einmal die Shell verlassen und neu anmelden. Testen mit xml --version und die Version 1.6.0 wird ausgegeben.

Nun mal ein paar Beispiele für die Verwendung.

Zuerst benötigen wir eine XML Datei zum testen. Die können wir mal mit dem Verzeichnisinhalt wie folgt erstellen.

xml ls > xml-test-datei.xml

Die hat nun folgenden Inhalt:
test xml

Wir können auch die a, p und m Attribute entfernen, in dem wir das Ergebnis eines xmlstarlet Laufs wieder als Parameter für den nächsten edit xmlstarlet Aufruf über Pipe (|) verwenden:
xml ls | xml ed -d "//d" -d "//@a" -d "//@m" -d "//@p"
Bildschirmfoto 2014-08-12 um 21.05.42
und das ganze noch mit dem ersetzen des f Attributs durch file:
xml ls | xml ed -d "//d" -d "//@a" -d "//@m" -d "//@p" -d "//d" -r "//f" -v "file"
Bildschirmfoto 2014-08-12 um 21.14.41

Für weitere Test, holen wir uns erst einmal ein Beispiel XML:

wget http://www.wenzlaff.de/pad/xmltocsv.xml

Schauen wir uns nun die Struktur dieser XML Datei an mit:

xml el xmltocsv.xml

Ergebnis:
XML_DIZ_INFO
XML_DIZ_INFO/MASTER_PAD_VERSION_INFO
XML_DIZ_INFO/MASTER_PAD_VERSION_INFO/MASTER_PAD_EDITOR
XML_DIZ_INFO/MASTER_PAD_VERSION_INFO/MASTER_PAD_INFO
XML_DIZ_INFO/MASTER_PAD_VERSION_INFO/MASTER_PAD_VERSION
XML_DIZ_INFO/Company_Info
XML_DIZ_INFO/Company_Info/Company_Name
XML_DIZ_INFO/Company_Info/Address_1
XML_DIZ_INFO/Company_Info/Address_2
XML_DIZ_INFO/Company_Info/Zip_Postal_Code
XML_DIZ_INFO/Company_Info/City_Town
XML_DIZ_INFO/Company_Info/Country
...

Wenn die Sonderzeichen in dem XML escaped werden sollen, kann dies wie folgt geschehen:
cat xmltocsv.xml | xml esc > xmltocsv-esc.xml
und schon hat man eine Datei, die man auch hier in WordPress einfügen kann:
Bildschirmfoto 2014-08-12 um 21.34.11 und als Text eingefügt im Blog:

<?xml version="1.0" encoding="UTF-8"?>
<XML_DIZ_INFO>
<MASTER_PAD_VERSION_INFO>
<MASTER_PAD_EDITOR>DeuPAD 3.1.0.55 (http://www.deupad.org)</MASTER_PAD_EDITOR>
<MASTER_PAD_INFO>Portable Application Description, or PAD for short, is a data set that is used by shareware authors to dissemminate information to anyone interested in their software products. To find out more go to http://www.asp-shareware.org/pad</MASTER_PAD_INFO>
<MASTER_PAD_VERSION>3.10</MASTER_PAD_VERSION>
</MASTER_PAD_VERSION_INFO>
<Company_Info>
<Company_Name>Thomas Wenzlaff</Company_Name>
<Address_1>Tempelhofer Str. 9</Address_1>
<Address_2 />
...

Weitere Beispiele sind in der Anleitung zu finden. Habt Ihr noch gute Beispiele oder Anwendungsfälle, dann hier posten.