Question

J'ai ce grand fichier XML qui contient beaucoup de commentaires.

Quelle est la « meilleure façon » de dépouiller tous les commentaires et le format xml bien à partir de la ligne de commande linux?

Était-ce utile?

La solution

vous pouvez utiliser bien rangé

$ tidy -quiet -asxml -xml -indent -wrap 1024 --hide-comments 1 tomcat-users.xml
<?xml version='1.0' encoding='utf-8'?>
<tomcat-users>
  <user username="qwerty" password="ytrewq" roles="manager-gui" />
</tomcat-users>

Autres conseils

Vous pouvez regarder l'outil xmllint. Il dispose de plusieurs options (dont --format fera une jolie impression), mais je ne peux pas comprendre comment supprimer les commentaires à l'aide de cet outil.

En outre, consultez xmlstarlet , un tas d'outils de ligne de commande pour faire ce que vous voulez avec xml. Ensuite, faites:

xml c14n --without-comments # XML file canonicalization w/o comments

EDIT : OP éventuellement utilisé cette ligne:

xmlstarlet c14n --without-comments old.xml > new.xml

Pour ranger quelque chose de simple comme le server.xml de Tomcat, j'utilise

sed 's/<!--/\x0<!--/g;s/-->/-->\x0/g' | grep -zv '^<!--' | tr -d '\0' | grep -v "^\s*$"

i.e..

function tidy() {
 echo "$( cat $1 | sed 's/<!--/\x0<!--/g;s/-->/-->\x0/g' | grep -zv '^<!--' | tr -d '\0' | grep -v "^\s*$")"
}

tidy server.xml

... imprimera le xml sans commentaires.

NOTE: alors qu'il fonctionne raisonnablement bien pour des choses simples, il échouera avec certains blocs CDATA et d'autres situations. Utilisez uniquement pour les scripts XML contrôlés qui ont pas besoin et ne sera jamais besoin d'échapper à un seul <-- ou --> partout!

marque le premier sed commentaire de début et arrêter avec des personnages de 0x0, puis grep avec -z traite 0x0 comme séparateur seule ligne, recherche des lignes commençant par un commentaire, il est -v le filtre intervertit, laissant des lignes significatives seulement. Enfin, tr -d \ 0` supprime tous ces 0x0, et de le polir, une autre grep supprime les lignes vides. Le tour est joué

La meilleure façon serait d'utiliser un analyseur XML pour traiter tous les cas de coin obscur correctement. Mais si vous avez besoin quelque chose de rapide et sale, il y a une variété de solutions à court en utilisant Perl Regexes qui peut être suffisant.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top