Analizar XML en Bash
Encontrar a cualquier desarrollador que todavía no trabaje con XML es casi imposible. Es un lenguaje de marcado popular ampliamente utilizado para estructurar y transferir datos.
Este artículo mostrará cómo podemos analizar XML a través de Bash.
Vamos a hablar de dos bibliotecas aquí. Nuestra primera biblioteca es xmllint
, y la segunda se conoce como XMLStarlet
.
Debe instalarlos antes de trabajar con ellos.
Use xmllint
para analizar XML en Bash
Esta es la biblioteca más común que se puede usar para analizar el archivo XML. Pero debe descargar e instalar la biblioteca antes de usarla.
Para instalar esta biblioteca, debe ejecutar los siguientes comandos.
sudo apt-get update -qq
sudo apt-get install -y libxml2-utils
Debes instalar el paquete libxml2-utils
con el apt-get
.
Si tiene un archivo XML llamado MyXML.xml
, puede obtener fácilmente el XML usando el siguiente comando.
xmllint MyXML.xml
Después de ejecutar el comando anterior, obtendrá un resultado como el siguiente.
<?xml version="1.0"?>
<specification>
<type>Laptop</type>
<model>Macbook</model>
<screenSizeInch>14</screenSizeInch>
</specification>
Esta biblioteca contiene algunas opciones o banderas. Las opciones disponibles para la biblioteca se comparten a continuación.
--auto
: esta bandera es para generar un documento para la prueba.--catalogs
- Esta bandera es para usar los catálogos deSGML_CATALOG_FILES
. De lo contrario,/etc/xml/catalog
se usa por defecto.--chkregister
: este indicador es para activar el registro de nodos.--compress
: este indicador es para activar la compresióngzip
de la salida.--copy
: esta bandera es para probar la implementación de la copia interna.--c14n
: este indicador es para usar la canonicalización XML W3C (C14N) que serializa el resultado del análisis a través destdout
. También mantiene los comentarios en el resultado.--dtdvalid URL
: esta bandera es para usar la DTD especificada por la URL para la validación.--dtdvalidfpi FPI
: esta bandera es para usar la DTD que especifica un identificador público FPI para la validación; tenga en cuenta que esta bandera requerirá una exportación de catálogo que funcione como un identificador público para funcionar.--debug
: este indicador es para analizar un archivo. También genera un árbol anotado que es la versión en memoria del documento.--debugent
: esta bandera es para depurar las entidades definidas en el documento.--dropdtd
: este indicador es para eliminar DTD de la salida.--dtdattr
: esta bandera buscará un DTD externo. También llena el árbol con atributos heredados.--encode
: esta bandera proporcionará salida en la codificación dada.--format
: esta bandera reformateará y repondrá la sangría de la salida.--help
: esta bandera imprimirá un resumen del uso dexmllint
.--html
: esta bandera es para usar el analizador HTML.--htmlout
: esta bandera mostrará el resultado como un archivo HTML. Emitirá las etiquetas HTML necesarias que rodean la salida del árbol de resultados para que los resultados se puedan mostrar/ver en un navegador.--insert
: esta bandera es para probar inserciones válidas.--loaddtd
: este indicador es para obtener la DTD externa.--load-trace
: esta bandera mostrará todos los documentos cargados cuando se procesan enstderr
.--maxmem NNBYTES
: este indicador es para probar el soporte de memoria del analizador. Aquí, elNNBYTES
es el número máximo de bytes que la biblioteca puede asignar.--memory
: este indicador es para analizar desde la memoria.--noblanks
: esta bandera arrojará espacios en blanco ignorables.--nocatalogs
: esta bandera especifica que no se deben usar catálogos.--nocdata
: esta bandera sustituirá la secciónCDATA
a través de nodos de texto equivalentes.--noent
: esta bandera sustituirá valores de entidad por referencias de entidad.--nonet
: este indicador especifica que no se debe usar Internet para obtener DTD o entidades.--noout
- Esta bandera suprimirá la salida.xmllint
mostrará la salida del árbol de resultados por defecto.--nowarning
: esta bandera especifica que no se emitan advertencias desde el validador y/o el analizador.--nowrap
: esta bandera especifica que no se genere un envoltorio de documentos HTML.--noxincludenod
: este indicador es para realizar el procesamientoXInclude
, pero especifica que no se generen los nodos de inicio y finalizaciónXInclude
.--nsclean
: esta bandera es para eliminar declaraciones de espacios de nombres redundantes.--output FILE
: este indicador define una ruta de archivo dondexmllint
guarda el resultado del análisis.--path "PATH(S)"
: esta bandera es para usar la lista (separada por dos puntos o por espacios) de rutas delsistema de archivos
especificadas porPATHS
para cargar DTD o entidades. Aquí, las listas separadas por espacios están encerradas entre comillas.--pattern PATTERNVALUE
: esta bandera es para ejercitar el motor de reconocimiento de patrones que se puede usar con una interfaz de lector. También se utiliza para la depuración.--postvalid
: esta bandera es para validar después de que se completa el análisis.--push
- Esta bandera habilita el modopush
.--recover
: este indicador es para generar cualquier parte analizable del documento no válido.--relaxng SCHEMA
: esta bandera usará un archivoRelaxNG
llamadoSCHEMA
para la validación.--repetir
: esta bandera es para repetir 100 veces para cronometrar o perfilar.--schema
: este indicador utilizará el archivo de esquema XML W3C conocido comoSCHEMA
.--shell
- Ejecuta un shell de navegación.--stream
: este indicador es para transmitir la API.--testIO
: esta bandera probará el soporte de entrada/salida del usuario.--timing
: este indicador generará información sobre el tiempo que tarda elxmllint
en realizar los diversos pasos.--valid
- Esta bandera comprobará la validez del documento.--version
: esta bandera mostrará la versión de la biblioteca.--walker
: esta bandera probará el módulowalker
--xinclude
: esta bandera realizará el procesamientoXInclude
.--xmlout
: esta bandera se usa principalmente junto con--html
. Guardará el documento con el serializador XML. Se utiliza principalmente para convertir de HTML a XHTML.
Use XMLStarlet
para analizar XML en Bash
Otra biblioteca popular para analizar cualquier documento XML se conoce como XMLStarlet
. El comando principal de la biblioteca es xmlstarlet
.
Debe ejecutar el siguiente comando como raíz para instalar esta biblioteca.
sudo dnf install xmlstarlet
Contiene opciones útiles que facilitan la validación, transformación o consulta de archivos XML. Puede obtener fácilmente un archivo XML a través del comando más simple de la biblioteca.
xmlstarlet format MyXML.xml
Después de ejecutar el comando anterior, verá el contenido del archivo XML como una salida como la siguiente.
<?xml version="1.0"?>
<specification>
<type>Laptop</type>
<model>Macbook</model>
<screenSizeInch>14</screenSizeInch>
</specification>
Todos los códigos utilizados en este artículo están escritos en Bash. Solo funcionará en el entorno Linux Shell.
Aminul Is an Expert Technical Writer and Full-Stack Developer. He has hands-on working experience on numerous Developer Platforms and SAAS startups. He is highly skilled in numerous Programming languages and Frameworks. He can write professional technical articles like Reviews, Programming, Documentation, SOP, User manual, Whitepaper, etc.
LinkedIn