examples xml unix command-line

examples - ¿Cómo imprimir bastante XML desde la línea de comandos?



xmllint windows (5)

Relacionado: ¿Cómo puedo imprimir de forma bonita JSON en un script de shell (unix)?

¿Hay un script de shell (unix) para formatear XML en forma legible para el usuario?

Básicamente, quiero que transforme lo siguiente:

<root><foo a="b">lorem</foo><bar value="ipsum" /></root>

... en algo como esto:

<root> <foo a="b">lorem</foo> <bar value="ipsum" /> </root>


Intenta hacer esto:

echo ''<root><foo a="b">lorem</foo><bar value="ipsum" /></root>'' | xmllint --format -

Esta utilidad viene con libxml2-utils

o

echo ''<root><foo a="b">lorem</foo><bar value="ipsum" /></root>'' | xml_pp

este comando viene con el módulo XML::Twig perl , a veces el paquete xml-twig-tools .

o

echo ''<root><foo a="b">lorem</foo><bar value="ipsum" /></root>'' | xmlstarlet format --indent-tab

este comando viene con xmlstarlet

o

echo ''<root><foo a="b">lorem</foo><bar value="ipsum" /></root>'' | tidy -xml -i -

revisa el paquete tidy

o

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()''

o

echo ''<root><foo a="b">lorem</foo><bar value="ipsum" /></root>'' | saxon-lint --indent --xpath ''/'' -

comprobar saxon-lint

o

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''

Compruebe saxon-HE


No mencionó un archivo, por lo que supongo que desea proporcionar la cadena XML como entrada estándar en la línea de comandos. En ese caso, haga lo siguiente:

$ echo ''<root><foo a="b">lorem</foo><bar value="ipsum" /></root>'' | xmllint --format -


También puede usar tidy , que puede ser necesario instalar primero (por ejemplo, en Ubuntu: sudo apt-get install tidy ).

Para esto, emitirías algo como lo siguiente:

tidy -xml -i your-file.xml > output.xml

Nota: tiene muchos indicadores de legibilidad adicionales, pero el comportamiento de ajuste de palabras es un poco molesto de desenredar ( http://tidy.sourceforge.net/docs/quickref.html ).


Soporte de formato xmllint en el lugar :

for f in *.xml; do xmllint -o $f --format $f; done

Como ha escrito Daniel Veillard:

Creo que xmllint -o tst.xml --format tst.xml debería ser seguro ya que el analizador cargará completamente la entrada en un árbol antes de abrir la salida para serializarla.

El nivel de sangría es controlado por la variable de entorno XMLLINT_INDENT que es por defecto 2 espacios. Ejemplo de cómo cambiar la sangría a 4 espacios:

XMLLINT_INDENT='' '' xmllint -o out.xml --format in.xml

Puede --recover opción --recover cuando los documentos XML están rotos. O pruebe un analizador HTML débil con salida XML estricta:

xmllint --html --xmlout <in.xml >out.xml

--nsclean , --nsclean , --nonet , --nocdata , etc. pueden ser útiles. Leer la página del manual.

apt-get install libxml2-utils apt-cyg install libxml2 brew install libxml2


xmllint --format yourxmlfile.xml

xmllint es una herramienta XML de línea de comandos y se incluye en libxml2 ( http://xmlsoft.org/ ).

================================================

Nota: Si no tiene instalado libxml2 , puede instalarlo haciendo lo siguiente:

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

Mac OS

Para instalar esto en MacOS con Homebrew, simplemente haga: brew install libxml2