Procesar archivos xml con xmlstarlet

Hoy en día resulta bastante común encontrar aplicaciones que guardan información en ficheros xml.

xmlstarlet es una interesante herramienta de línea de comandos que nos va a permitir obtener datos de un fichero xml, modificarlo o validarlo.

En nuestro caso, a principios de curso, creamos las cuentas de los usuarios a partir de ficheros .xml generados mediante Rayuela. Pues bien, podemos utilizar xmlstarlet para procesar estos ficheros y obtener la información que necesitamos para convertirla a otro formato, como por ejemplo .csv
Supongamos que el fichero de exportación de alumnos almacena la información de cada alumno de la siguiente manera:
<alumno>
   <nie>9496969</nie>
   <nombre>Pedro</nombre>
   <primer-apellido>Aguilar</primer-apellido>
   <segundo-apellido>Cobo</segundo-apellido>
   <fecha-nacimiento>20/10/2002</fecha-nacimiento>
   <datos-usuario-rayuela>
      <es-usuario>true</es-usuario>
      <login>paguilarc01</login>
      <id-usuario>597450</id-usuario>
   </datos-usuario-rayuela>
   <grupo>E1A</grupo>
   <foto>
      <con-foto>true</con-foto>
      <formato>jpg</formato>
      <nombre-fichero>9496969.jpg</nombre-fichero>
   </foto>
</alumno>
Podemos extraer los datos de nie, nombre, primer-apellido, segundo-apellido y login de todos los alumnos y almacenarlos en un fichero csv con la siguiente estructura: 
9496969,Pedro,Aguilar Cobo,paguilarc01
Con tan sólo ejecutar el comando:
$ xmlstarlet sel -t -m //alumnado-centro/alumno -v nie -o "," -v nombre -o "," -v primer-apellido -o " " -v segundo-apellido -o "," -m datos-usuario-rayuela -v login -n Alumnos.xml

Si analizáis la sintaxis anterior veréis que es muy sencilla:

  • Utilizando la opción de selección (sel), aplicamos la plantilla (-t) que le indicamos a continuación al comando.
  • Procesamos cada entidad alumno (//alumnado-centro/alumno) y extraemos su nie (-v nie).
  • Insertamos una coma (-o ",") en la salida.
  • Extraemos el nombre (-v nombre).
  • Insertamos una coma (-o ",") en la salida.
  • Extraemos el primer-apellido (-v primer-apellido). 
  • Insertamos una coma (-o ",") en la salida.
  • Extraemos el segundo-apellido (-v segundo-apellido). 
  • Y de la entidad datos-usuario-rayuela del alumno (-m datos-usuario-rayuela -v login) extraemos su login.
  • E insertamos un salto de línea (-n) en la salida.
Del mismo modo, podemos extraer datos del fichero de exportación de datos de profesores puesto que la estructura es similar:
$ xmlstarlet sel -t -m //profesorado-centro/profesor -v dni -o "," -v nombre -o "," -v primer-apellido -o " " -v segundo-apellido -o "," -m datos-usuario-rayuela -v login -o "@iesvalledeljerteplasencia.es" -n ExportacionDatosProfesorado.xml
Be the first to comment

Por favor acceder para comentar.