149 votes

Grep et Sed Équivalent pour XML Ligne de Commande de Traitement

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?

108voto

Russ Points 1126

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:

http://www.ibm.com/developerworks/library/x-starlet.html

38voto

Joseph Holsten Points 4116

À 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.

26voto

Vi. Points 5841

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.

25voto

bortzmeyer Points 12246

Pour Joseph Holsten excellente liste, j'ajoute le xpath script de ligne de commande qui vient avec la bibliothèque Perl XML::XPath. Un excellent moyen pour extraire des informations à partir de fichiers XML:

 xpath -q -e '/entry[@xml:lang="fr"]' *xml

6voto

Adrian Mouat Points 5533

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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X