Beim Shell-Scripting befinden sich Daten normalerweise in Dateien mit einzeiligen Datensätzen wie csv. Es ist wirklich einfach, diese Daten mit grep
und zu verarbeiten sed
. Da ich mich jedoch häufig mit XML befassen muss, möchte ich wirklich einen Skriptzugriff auf diese XML-Daten über die Befehlszeile durchführen. Was sind die besten Werkzeuge?
xml
command-line
scripting
Joseph Holsten
quelle
quelle
Antworten:
Ich habe festgestellt, dass xmlstarlet in solchen Dingen ziemlich gut ist.
http://xmlstar.sourceforge.net/
Sollte auch in den meisten Distributions-Repositories verfügbar sein. Ein einführendes Tutorial finden Sie hier:
http://www.ibm.com/developerworks/library/x-starlet.html
quelle
Einige vielversprechende Tools:
nokogiri : Analysieren von HTML / XML-DOMs in Ruby mithilfe von XPath- und CSS-Selektoren
hpricot : veraltet
fxgrep : Verwendet eine eigene XPath-ähnliche Syntax zum Abfragen von Dokumenten. In SML geschrieben, daher kann die Installation schwierig sein.
LT XML : XML - Toolkit von SGML - Tool abgeleitet, einschließlich
sggrep
,sgsort
,xmlnorm
und andere. Verwendet eine eigene Abfragesyntax. Die Dokumentation ist sehr formal. In C. LT XML 2 wird die Unterstützung von XPath, XInclude und anderen W3C-Standards beansprucht.xmlgrep2 : einfache und leistungsstarke Suche mit XPath. Geschrieben in Perl mit XML :: LibXML und libxml2.
XQSharp : Unterstützt XQuery, die Erweiterung von XPath. Geschrieben für .NET Framework.
xml-coreutils : Laird Breyers Toolkit, das GNU-Coreutils entspricht. In einem interessanten Aufsatz darüber diskutiert, was das ideale Toolkit enthalten sollte.
xmldiff : Einfaches Tool zum Vergleichen von zwei XML-Dateien.
xmltk : scheint kein Paket in Debian, Ubuntu, Fedora oder Macports zu haben, hat seit 2007 keine Veröffentlichung mehr und verwendet nicht portable Build-Automatisierung.
xml-coreutils scheint am besten dokumentiert und am meisten UNIX-orientiert zu sein.
quelle
Zu Joseph Holstens hervorragender Liste füge ich das xpath-Befehlszeilenskript hinzu, das mit der Perl-Bibliothek XML :: XPath geliefert wird. Eine großartige Möglichkeit, Informationen aus XML-Dateien zu extrahieren:
quelle
-q -e
Optionen. Beispiel:xpath AndroidManifest.xml 'string(/manifest/@package)' 2> /dev/null
Es gibt auch
xml2
und2xml
Paar. Es ermöglicht den üblichen Tools zum Bearbeiten von Zeichenfolgen, XML zu verarbeiten.Beispiel. q.xml:
xml2 < q.xml
xml2 < q.xml | grep textnode | sed 's!/foo!/bar/baz!' | 2xml
PS Es gibt auch
html2
/2html
.quelle
2xml
kann leicht XML aus Teil (gefiltert) neuxml2
ausgegeben.cat foo.xml | xml2 | grep /bar | 2xml
- gibt dir die gleiche Struktur wie das Original, aber alle Elemente außer "Balken" -Elementen wurden entfernt. Genial.Sie können xmllint verwenden:
Sollte mit den meisten Distributionen gebündelt werden und ist auch mit Cygwin gebündelt.
Sehen:
quelle
--xpath
Argument fürxmllint
: manpagez.com/man/1/xmllint--xpath
ist eine relativ neue Ergänzung und zB nicht in RHEL 6-Versionen vonxmllint
.xmllint --xpath
Genauer gesagt wurde es in libxml2 2.7.7 (2010) eingeführt.Wenn Sie nach einer Lösung unter Windows suchen, verfügt Powershell über integrierte Funktionen zum Lesen und Schreiben von XML.
test.xml:
Powershell-Skript:
testNew.xml:
Quelle: /server/26976/update-xml-from-the-command-line-windows
quelle
xps $doc .root.one
xps $doc 'AppendChild("three")'
undxps $doc '.three.set_InnerText("And don't you forget it!")'
was eindeutig minderwertig ist!Es gibt auch xmlsed & xmlgrep der NetBSD xmltools!
http://blog.huoc.org/xmltools-not-dead.html
quelle
Kommt genau darauf an, was du machen willst.
XSLT ist vielleicht der richtige Weg, aber es gibt eine Lernkurve. Probieren Sie xsltproc aus und beachten Sie, dass Sie Parameter eingeben können.
quelle
Es gibt auch
saxon-lint
über die Befehlszeile die Möglichkeit, XPath 3.0 / XQuery 3.0 zu verwenden. (Andere Befehlszeilentools verwenden XPath 1.0).BEISPIELE:
http / html:
xml:
quelle
D. Bohdan unterhält ein Open-Source-GitHub-Repo, das eine Liste von Befehlszeilenwerkzeugen für strukturierte Textwerkzeuge enthält. Dort gibt es einen Abschnitt für XML / HTML-Werkzeuge:
https://github.com/dbohdan/structured-text-tools#xml-html
quelle
XQuery könnte eine gute Lösung sein. Es ist (relativ) leicht zu erlernen und ein W3C-Standard.
Ich würde XQSharp für einen Befehlszeilenprozessor empfehlen .
quelle
Ich habe zuerst xmlstarlet verwendet und benutze es immer noch. Wenn die Abfrage schwierig wird, benötige ich die Unterstützung der XML-Funktionen xpath2 und xquery. Ich wende mich an xidel http://www.videlibri.de/xidel.html
quelle
Grep-Äquivalent
Sie können eine Bash-Funktion definieren, z. B. "xp" ("xpath"), die Python3-Code umschließt. Um es zu verwenden, müssen Sie python3 und python-lxml installieren. Leistungen:
Es ist einfach und leistungsstark wie folgt zu bedienen:
xp () sieht ungefähr so aus:
Sed Äquivalent
Erwägen Sie die Verwendung von xq, wodurch Sie die volle Leistung der jq "Programmiersprache" erhalten. Wenn Sie Python-Pip installiert haben, können Sie xq mit pip install yq installieren. Im folgenden Beispiel ersetzen wir "Konten behalten" durch "Konten behalten 2":
quelle
JEdit verfügt über ein Plugin namens "XQuery", das Abfragefunktionen für XML-Dokumente bietet.
Nicht ganz die Kommandozeile, aber es funktioniert!
quelle
grep(1)
.