Analizar XML en Bash

MD Aminul Islam 20 junio 2023
  1. Use xmllint para analizar XML en Bash
  2. Use XMLStarlet para analizar XML en Bash
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.

  1. --auto: esta bandera es para generar un documento para la prueba.
  2. --catalogs - Esta bandera es para usar los catálogos de SGML_CATALOG_FILES. De lo contrario, /etc/xml/catalog se usa por defecto.
  3. --chkregister: este indicador es para activar el registro de nodos.
  4. --compress: este indicador es para activar la compresión gzip de la salida.
  5. --copy: esta bandera es para probar la implementación de la copia interna.
  6. --c14n: este indicador es para usar la canonicalización XML W3C (C14N) que serializa el resultado del análisis a través de stdout. También mantiene los comentarios en el resultado.
  7. --dtdvalid URL: esta bandera es para usar la DTD especificada por la URL para la validación.
  8. --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.
  9. --debug: este indicador es para analizar un archivo. También genera un árbol anotado que es la versión en memoria del documento.
  10. --debugent: esta bandera es para depurar las entidades definidas en el documento.
  11. --dropdtd: este indicador es para eliminar DTD de la salida.
  12. --dtdattr: esta bandera buscará un DTD externo. También llena el árbol con atributos heredados.
  13. --encode: esta bandera proporcionará salida en la codificación dada.
  14. --format: esta bandera reformateará y repondrá la sangría de la salida.
  15. --help: esta bandera imprimirá un resumen del uso de xmllint.
  16. --html: esta bandera es para usar el analizador HTML.
  17. --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.
  18. --insert: esta bandera es para probar inserciones válidas.
  19. --loaddtd: este indicador es para obtener la DTD externa.
  20. --load-trace: esta bandera mostrará todos los documentos cargados cuando se procesan en stderr.
  21. --maxmem NNBYTES: este indicador es para probar el soporte de memoria del analizador. Aquí, el NNBYTES es el número máximo de bytes que la biblioteca puede asignar.
  22. --memory: este indicador es para analizar desde la memoria.
  23. --noblanks: esta bandera arrojará espacios en blanco ignorables.
  24. --nocatalogs: esta bandera especifica que no se deben usar catálogos.
  25. --nocdata: esta bandera sustituirá la sección CDATA a través de nodos de texto equivalentes.
  26. --noent: esta bandera sustituirá valores de entidad por referencias de entidad.
  27. --nonet: este indicador especifica que no se debe usar Internet para obtener DTD o entidades.
  28. --noout - Esta bandera suprimirá la salida. xmllint mostrará la salida del árbol de resultados por defecto.
  29. --nowarning: esta bandera especifica que no se emitan advertencias desde el validador y/o el analizador.
  30. --nowrap: esta bandera especifica que no se genere un envoltorio de documentos HTML.
  31. --noxincludenod: este indicador es para realizar el procesamiento XInclude, pero especifica que no se generen los nodos de inicio y finalización XInclude.
  32. --nsclean: esta bandera es para eliminar declaraciones de espacios de nombres redundantes.
  33. --output FILE: este indicador define una ruta de archivo donde xmllint guarda el resultado del análisis.
  34. --path "PATH(S)": esta bandera es para usar la lista (separada por dos puntos o por espacios) de rutas del sistema de archivos especificadas por PATHS para cargar DTD o entidades. Aquí, las listas separadas por espacios están encerradas entre comillas.
  35. --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.
  36. --postvalid: esta bandera es para validar después de que se completa el análisis.
  37. --push - Esta bandera habilita el modo push.
  38. --recover: este indicador es para generar cualquier parte analizable del documento no válido.
  39. --relaxng SCHEMA: esta bandera usará un archivo RelaxNG llamado SCHEMA para la validación.
  40. --repetir: esta bandera es para repetir 100 veces para cronometrar o perfilar.
  41. --schema: este indicador utilizará el archivo de esquema XML W3C conocido como SCHEMA.
  42. --shell - Ejecuta un shell de navegación.
  43. --stream: este indicador es para transmitir la API.
  44. --testIO: esta bandera probará el soporte de entrada/salida del usuario.
  45. --timing: este indicador generará información sobre el tiempo que tarda el xmllint en realizar los diversos pasos.
  46. --valid - Esta bandera comprobará la validez del documento.
  47. --version: esta bandera mostrará la versión de la biblioteca.
  48. --walker: esta bandera probará el módulo walker
  49. --xinclude: esta bandera realizará el procesamiento XInclude.
  50. --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.

MD Aminul Islam avatar MD Aminul Islam avatar

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