Quand vous faites des scripts shell, généralement des données sera dans les fichiers de ligne des records comme csv. C'est vraiment simple à manipuler ces données avec grep
et sed
. Mais je dois traiter avec XML souvent, donc je voudrais vraiment une façon de script accès aux données XML via la ligne de commande. Quels sont les meilleurs outils?
Réponses
Trop de publicités?J'ai trouvé xmlstarlet être très bon à ce genre de chose.
http://xmlstar.sourceforge.net/
Devrait être disponible dans la plupart des distrib dépôts, trop. Un tutoriel d'introduction est ici:
À ce moment, la meilleure solution que j'ai trouvé est hpricot, qui fournit XPath & sélecteurs CSS et DOM. Mais il est uniquement disponible en rubis, donc je ne peux pas facilement l'utiliser dans un script shell.
MODIFIER J'ai trouvé de plus des outils prometteurs:
fxgrep: Utilise son propre XPath syntaxe de requête de documents. Écrit dans le SML, de sorte l'installation peut être difficile.
LT XML: Boîte à outils XML, dérivé de SGML outils, y compris l'
sggrep
,sgsort
,xmlnorm
et les autres. Utilise son propre langage de requête. La documentation est très formel. Écrit en C. LT XML 2 demandes de support de XPath, XInclude et les autres standards du W3C.xmlgrep2: simple et puissant à la recherche, avec XPath. Écrit en Perl à l'aide de XML::LibXML et libxml2.
XQSharp: Prend en charge XQuery, l'extension XPath. Écrit pour le .NET Framework.
xml-coreutils: Laird Breyer la trousse à outils d'équivalent GNU coreutils. Discuté dans une intéressant essai sur ce que l'idéal boîte à outils devraient inclure.
xmldiff: Outil Simple pour la comparaison de deux fichiers xml.
Je n'ai pas eu la chance d'essayer l'un de ces, mais xml-coreutils semble la mieux documentée et la plus orienté unix.
MODIFIER
J'ai supprimé xmltk à partir de cette liste. Il ne semble pas avoir paquet dans debian, ubuntu, fedora, ou macports. Il n'a également pas eu une libération depuis 2007, et utilise non-portable automatisation de la compilation. Je ne peux pas le recommander à moins qu'il devient de plus en plus portable.
Il est également xml2
et 2xml
paire. Il permettra d'habitude chaîne d'outils d'édition XML processus.
Exemple. q.xml:
<?xml version="1.0"?>
<foo>
text
more text
<textnode>ddd</textnode><textnode a="bv">dsss</textnode>
<![CDATA[ asfdasdsa <foo> sdfsdfdsf <bar> ]]>
</foo>
xml2 < q.xml
/foo=
/foo= text
/foo= more text
/foo=
/foo/textnode=ddd
/foo/textnode
/foo/textnode/@a=bv
/foo/textnode=dsss
/foo=
/foo= asfdasdsa <foo> sdfsdfdsf <bar>
/foo=
xml2 < q.xml | grep textnode | sed 's!/foo!/bar/baz!' | 2xml
<bar><baz><textnode>ddd</textnode><textnode a="bv">dsss</textnode></baz></bar>
P. S. Il y a aussi html2
/ 2html
.
Dépend exactement ce que vous voulez faire.
XSLT peut être le chemin à parcourir, mais il y a une courbe d'apprentissage. Essayez de xsltproc et notez que vous pouvez à la main dans les paramètres.