Lorsque vous effectuez des scripts shell, les données se trouvent généralement dans des fichiers d'enregistrements sur une seule ligne tels que csv. C'est vraiment simple de gérer ces données avec grep
et sed
. Mais je dois souvent m'occuper de XML, donc j'aimerais vraiment avoir un moyen d'accéder par script à ces données XML via la ligne de commande. Quels sont les meilleurs outils?
xml
command-line
scripting
Joseph Holsten
la source
la source
Réponses:
J'ai trouvé que xmlstarlet était assez bon dans ce genre de choses.
http://xmlstar.sourceforge.net/
Devrait également être disponible dans la plupart des référentiels de distribution. Un tutoriel d'introduction est ici:
http://www.ibm.com/developerworks/library/x-starlet.html
la source
Quelques outils prometteurs:
nokogiri : analyse des DOM HTML / XML dans ruby à l'aide des sélecteurs XPath et CSS
hpricot : obsolète
fxgrep : utilise sa propre syntaxe de type XPath pour interroger des documents. Écrit en SML, l'installation peut donc être difficile.
LT XML : boîte à outils XML dérivé d'outils de SGML, y compris
sggrep
,sgsort
,xmlnorm
et d' autres. Utilise sa propre syntaxe de requête. La documentation est très formelle. Écrit en C. LT XML 2 revendique la prise en charge de XPath, XInclude et d'autres normes W3C.xmlgrep2 : recherche simple et puissante avec XPath. Écrit en Perl en utilisant XML :: LibXML et libxml2.
XQSharp : prend en charge XQuery, l'extension de XPath. Rédigé pour le .NET Framework.
xml-coreutils : boîte à outils de Laird Breyer équivalente à GNU coreutils. Discuté dans un essai intéressant sur ce que la boîte à outils idéale devrait inclure.
xmldiff : outil simple pour comparer deux fichiers xml.
xmltk : ne semble pas avoir de paquet dans debian, ubuntu, fedora ou macports, n'a pas eu de version depuis 2007 et utilise une automatisation de construction non portable.
xml-coreutils semble le mieux documenté et le plus orienté UNIX.
la source
À l'excellente liste de Joseph Holsten, j'ajoute le script de ligne de commande xpath fourni avec la bibliothèque Perl XML :: XPath. Un excellent moyen d'extraire des informations à partir de fichiers XML:
la source
-q -e
options. Exemple, obtenez la valeur de l'attribut "package" à partir du nœud "manifest" dans "AndroidManifest.xml":xpath AndroidManifest.xml 'string(/manifest/@package)' 2> /dev/null
Il y a aussi
xml2
et2xml
paire. Cela permettra aux outils d'édition de chaînes habituels de traiter XML.Exemple. q.xml:
xml2 < q.xml
xml2 < q.xml | grep textnode | sed 's!/foo!/bar/baz!' | 2xml
PS Il y a aussi
html2
/2html
.la source
2xml
Peut également recréer facilement du XML à partir d'unexml2
sortie partielle (filtrée) .cat foo.xml | xml2 | grep /bar | 2xml
- vous donne la même structure que l'original, mais tous les éléments ont été supprimés sauf les éléments "barre". Impressionnant.Vous pouvez utiliser xmllint:
Doit être fourni avec la plupart des distributions et est également fourni avec Cygwin.
Voir:
la source
--xpath
argument àxmllint
: manpagez.com/man/1/xmllint--xpath
est un ajout assez récent et par exemple pas dans les versions RHEL 6 dexmllint
.xmllint --xpath
été introduit dans libxml2 2.7.7 (en 2010).Si vous recherchez une solution sous Windows, Powershell dispose d'une fonctionnalité intégrée pour lire et écrire du XML.
test.xml:
Script PowerShell:
testNew.xml:
Source: /server/26976/update-xml-from-the-command-line-windows
la source
xps $doc .root.one
xps $doc 'AppendChild("three")'
etxps $doc '.three.set_InnerText("And don't you forget it!")'
, ce qui est clairement inférieur!Il y a aussi xmlsed et xmlgrep des xmltools NetBSD!
http://blog.huoc.org/xmltools-not-dead.html
la source
Cela dépend exactement de ce que vous voulez faire.
XSLT est peut-être la voie à suivre, mais il y a une courbe d'apprentissage. Essayez xsltproc et notez que vous pouvez transmettre des paramètres.
la source
Il existe également une
saxon-lint
ligne de commande avec la possibilité d'utiliser XPath 3.0 / XQuery 3.0. (D'autres outils de ligne de commande utilisent XPath 1.0).EXEMPLES :
http / html:
xml:
la source
D. Bohdan maintient un référentiel GitHub open source qui conserve une liste d'outils de ligne de commande pour les outils de texte structuré, il y a une section pour les outils XML / HTML:
https://github.com/dbohdan/structured-text-tools#xml-html
la source
XQuery pourrait être une bonne solution. C'est (relativement) facile à apprendre et c'est une norme du W3C.
Je recommanderais XQSharp pour un processeur de ligne de commande.
la source
J'ai d'abord utilisé xmlstarlet et je l'utilise toujours. Lorsque la requête devient difficile, j'ai besoin de la prise en charge des fonctionnalités xpath2 et xquery de XML.Je me tourne vers xidel http://www.videlibri.de/xidel.html
la source
Equivalent Grep
Vous pouvez définir une fonction bash, par exemple "xp" ("xpath") qui encapsule du code python3. Pour l'utiliser, vous devez installer python3 et python-lxml. Avantages:
C'est facile et puissant à utiliser comme ceci:
xp () ressemble à ceci:
Équivalent Sed
Pensez à utiliser xq qui vous donne toute la puissance du "langage de programmation" jq. Si vous avez installé python-pip, vous pouvez installer xq avec pip install yq , puis dans l'exemple ci-dessous, nous remplaçons "Keep Accounts" par "Keep Accounts 2":
la source
JEdit a un plugin appelé "XQuery" qui fournit des fonctionnalités d'interrogation pour les documents XML.
Pas tout à fait la ligne de commande, mais ça marche!
la source
grep(1)
.