Für die Bearbeitung von XML Dokumenten eignet sich gut das Programm xmlstarlet.
Das xmlstarlet, kann mit seinen Abhängigkeiten
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
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
--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
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:
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
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"
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"
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:
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.