[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: [OT] xmlstarlet y un script bash



El día 13 de abril de 2010 13:23, Camaleón <noelamac@gmail.com> escribió:
> El Tue, 13 Apr 2010 12:37:18 +0200, Alwar escribió:
>
>> Hola.
>> Tengo un archivo xml con varios nombres de archivos como este (tiene mas
>> cosas pero esta es la parte que no puedo sacar):
>>
>> <practica nombre="Practica1">
>>
>>    <fichero>fichero1</fichero>
>>
>>    <fichero>fichero2</fichero>
>>
>>    <fichero>fichero3</fichero>
>>
>>    <fichero>fichero4</fichero>
>>
>>    <fichero>fichero5</fichero>
>>
>> </practica>
>>
>> Y quiero que el programa xmlstarlet me muestre todos los nombres de
>> fichero y así poder meterlos en un array en bash para luego comprobar
>> que existan esos archivos.
>> Utilizando el comando   ""xmlstarlet sel -t -m "/practica" -v fichero
>> asignatura.xml""  solo consigo que me muestre "fichero1" pero yo quiero
>> mostrar todos, o alguna forma de que me muestre los sucesivos y así
>> poder leer todos.
>
> Te puedo decir cómo hacerlo con una hoja de transformación (XSLT) que
> puedes enlazar al XML:
>
> ***
> <?xml version="1.0"?>
> <xsl:stylesheet version="1.0"
> xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
> <xsl:template match="/">
> <xsl:for-each select="practica/fichero"><xsl:value-of select="."/>
> </xsl:for-each>
> </xsl:template>
> </xsl:stylesheet>
> ***
>
> Pero ese programa (xmlstarlet) no sé cómo va O:-)
>
> Saludos,
>
> --
> Camaleón

Gracias Camaleón por tu hoja de estilos, me dio la pista para sacar el
comando correcto.

Concretamente yo necesitaba
xmlstarlet sel -t -m practica/fichero -v "." -n archivo.xml
Ya que la opcion -m equivale al for-each de tu xsl y el -v al
value-of. A mi no me salia porque no se me ocurrio poner con el -v "."
que es lo que tu pusiste en tu xsl.
Saqué mas información de aquí:
http://mcs.une.edu.au/doc/xmlstarlet-1.0.1/xmlstarlet-ug.html#id1639281

Problema resuelto!
Muchas gracias a todos!



-- 
Alvaro Guzmán
http://alwar.mainfri.com


Reply to: