Connexes: Comment puis-je imprimer JSON en script shell (unix)?
Existe-t-il un script shell (unix) permettant de formater XML sous une forme lisible par l'homme?
En gros, je veux que cela transforme ce qui suit:
<root><foo a="b">lorem</foo><bar value="ipsum" /></root>
... dans quelque chose comme ça:
<root>
<foo a="b">lorem</foo>
<bar value="ipsum" />
</root>
libxml2-utils
Cet utilitaire est livré avec libxml2-utils
:
_echo '<root><foo a="b">lorem</foo><bar value="ipsum" /></root>' |
xmllint --format -
_
Perl _XML::Twig
_
Cette commande est fournie avec le module XML :: TwigPerl , parfois _xml-twig-tools
_:
_echo '<root><foo a="b">lorem</foo><bar value="ipsum" /></root>' |
xml_pp
_
xmlstarlet
Cette commande est livrée avec xmlstarlet
:
_echo '<root><foo a="b">lorem</foo><bar value="ipsum" /></root>' |
xmlstarlet format --indent-tab
_
tidy
Vérifiez le package tidy
:
_echo '<root><foo a="b">lorem</foo><bar value="ipsum" /></root>' |
tidy -xml -i -
_
Python
_xml.dom.minidom
_ de Python peut formater XML (python2 et python3):
_echo '<root><foo a="b">lorem</foo><bar value="ipsum" /></root>' |
python -c 'import sys;import xml.dom.minidom;s=sys.stdin.read();print(xml.dom.minidom.parseString(s).toprettyxml())'
_
saxon-lint
Vous avez besoin de saxon-lint
:
_echo '<root><foo a="b">lorem</foo><bar value="ipsum" /></root>' |
saxon-lint --indent --xpath '/' -
_
saxon-HE
Vous avez besoin de saxon-HE
:
_ echo '<root><foo a="b">lorem</foo><bar value="ipsum" /></root>' |
Java -cp /usr/share/Java/saxon/saxon9he.jar net.sf.saxon.Query \
-s:- -qs:/ '!indent=yes'
_
xmllint --format yourxmlfile.xml
xmllint est un outil XML en ligne de commande inclus dans libxml2
( http://xmlsoft.org/ ).
==============================================
Remarque: Si vous n'avez pas installé libxml2
, vous pouvez l'installer en procédant comme suit:
CentOS
cd /tmp
wget ftp://xmlsoft.org/libxml2/libxml2-2.8.0.tar.gz
tar xzf libxml2-2.8.0.tar.gz
cd libxml2-2.8.0/
./configure
make
Sudo make install
cd
Ubuntu
Sudo apt-get install libxml2-utils
Cygwin
apt-cyg install libxml2
MacOS
Pour l’installer sur MacOS avec Homebrew, il suffit de faire: brew install libxml2
Git
Egalement disponible sur Git si vous voulez le code: git clone git://git.gnome.org/libxml2
Vous pouvez également utiliser tidy , qui devra peut-être d'abord être installé (par exemple sur Ubuntu: Sudo apt-get install tidy
).
Pour cela, vous émettriez quelque chose comme:
tidy -xml -i your-file.xml > output.xml
Remarque: comporte de nombreux indicateurs de lisibilité supplémentaires, mais le comportement Word-wrap est un peu gênant à démêler ( http://tidy.sourceforge.net/docs/quickref.html ).
Vous n'avez pas mentionné un fichier, donc je suppose que vous voulez fournir la chaîne XML en tant qu'entrée standard sur la ligne de commande. Dans ce cas, procédez comme suit:
$ echo '<root><foo a="b">lorem</foo><bar value="ipsum" /></root>' | xmllint --format -
xmllint prend en charge le formatage sur place :
for f in *.xml; do xmllint -o $f --format $f; done
Comme Daniel Veillard l'a écrit:
Je pense que
xmllint -o tst.xml --format tst.xml
devrait être sûr car l'analyseur chargera complètement l'entrée dans un arbre avant d'ouvrir la sortie pour la sérialiser.
Le niveau d’indentation est contrôlé par la variable d’environnement XMLLINT_INDENT
qui est par défaut de 2 espaces. Exemple de modification du retrait par 4 espaces:
XMLLINT_INDENT=' ' xmllint -o out.xml --format in.xml
Il se peut que vous manquiez de l'option --recover
lorsque vos documents XML sont rompus. Ou essayez un analyseur HTML faible avec une sortie XML stricte:
xmllint --html --xmlout <in.xml >out.xml
--nsclean
, --nonet
, --nocdata
, --noblanks
etc peut être utile. Lisez la page de manuel.
apt-get install libxml2-utils
apt-cyg install libxml2
brew install libxml2
tidy
cat filename.xml | tidy -xml -iq
La redirection de la visualisation d'un fichier avec cat pour mettre de l'ordre en spécifiant le type de fichier xml et pour mettre en retrait tout en mode silencieux supprimera la sortie d'erreur. JSON fonctionne également avec -json
.