¿Existe una herramienta de línea de comandos que pueda eliminar comentarios de un archivo XML? ¿O necesito escribir un pequeño programa que utilice un analizador XML para hacer esto?
Actualizar: No me interesan soluciones que solo manejen un subconjunto de todos los archivos XML posibles.
Por ejemplo, una expresión regular no puede manejar el análisis XML.
Respuesta1
Yo lo haría de esta manera:
cat myfile.xml | sed '/<!--.*-->/d' | sed '/<!--/,/-->/d' > cleaned.xml
O:
awk 'in_comment&&/-->/{sub(/([^-]|-[^-])*--+>/,"");in_comment=0}
in_comment{next}
{gsub(/<!--+([^-]|-[^-])*--+>/,"");
in_comment=sub(/<!--+.*/,"");
print}'
O:
xmlstarlet ed -d '//comment()' file.xml
Respuesta2
Para ampliar la respuesta superior. Si sólo deseas eliminar el comentario y no toda la línea, probablemente deberías usar:
sed 's/<!--.*-->//'
En mi caso, tenía un archivo XML minimizado donde todo el contenido estaba en una sola línea y como la solución anterior eliminaba toda la línea donde se encontraba el comentario, borraría completamente mi archivo.
Respuesta3
Esto es bueno para limpiar comentarios de varias líneas (como pruebas fallidas) de un xml, al menos los que haya seleccionado manualmente y que sean útiles para el usuario final:
perl -i -w -0777pe 's/<!--(.(?<!(HELP|TODO)))*?-->//sg' somefile.xml
más sobre expresiones regulares relacionadas:https://stackoverflow.com/a/1240293/1422630
Si hay una manera de obtener el mismo resultado pero usando xmlstarlet, lo preferiría, ya que puede haber alguna excepción que las expresiones regulares no puedan manejar, pero por ahora esto es lo que tengo que usar.