He visto varias preguntas sobre cómo codificar un archivo de imagen en base64, pero ¿qué hay al revés - cómo puedo reconstituir una imagen desde una cadena base64 almacenada en un archivo XML?XSLT: Convierta datos base64 en archivos de imagen
<resource>
<data encoding="base64">
R0lGODlhEAAQAPMAMcDAwP/crv/erbigfVdLOyslHQAAAAECAwECAwECAwECAwECAwECAwECAwEC
AwECAyH/C01TT0ZGSUNFOS4wGAAAAAxtc09QTVNPRkZJQ0U5LjAHgfNAGQAh/wtNU09GRklDRTku
MBUAAAAJcEhZcwAACxMAAAsTAQCanBgAIf8LTVNPRkZJQ0U5LjATAAAAB3RJTUUH1AkWBTYSQXe8
fQAh+QQBAAAAACwAAAAAEAAQAAADSQhgpv7OlDGYstCIMqsZAXYJJEdRQRWRrHk2I9t28CLfX63d
ZEXovJ7htwr6dIQB7/hgJGXMzFApOBYgl6n1il0Mv5xuhBEGJAAAOw==
</data>
<mime>image/gif</mime>
<resource-attributes>
<file-name>clip_image001.gif</file-name>
</resource-attributes>
</resource>
Dado el nodo XML anterior resource
, ¿cómo hago para crear clip_image001.gif
?
Para sugerir:
- procesadores XSLT y/o extensiones permiten esto, además de
- un XSLT muestra que desencadena la conversión
Tenga en cuenta que debe ser capaz de manejar al menos GIF & formatos de archivo PNG. Preferiblemente no restringido a ningún SO.
solución implementada
base alrededor de Mads Hansen's solución. La principal diferencia es que hice referencia a net.sf.saxon.value.Base64BinaryValue
directamente en mi espacio de nombres en lugar de usar el espacio de nombres saxon
, porque entendí las API de Java de manera más intuitiva que las descripciones de las funcionesy base64Binary
del sitio web de Saxonica.
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:b64="net.sf.saxon.value.Base64BinaryValue"
xmlns:fos="java.io.FileOutputStream"
...
exclude-result-prefixes="b64 fos">
...
<xsl:for-each select="resource">
<xsl:variable name="b64" select="b64:new(string(data))"/>
...
<xsl:variable name="fos" select="fos:new(string($img))"/>
<xsl:value-of select="fos:write($fos, b64:getBinaryValue($b64))"/>
<xsl:value-of select="fos:close($fos)"/>
</xsl:for-each>
...
P.S. Vea sibling question para mi implementación de cómo obtener los hashes necesarios para identificar los archivos de imagen.
Esta pregunta es una sub pregunta de another question I have asked previously.
¡Gracias! Esto es lo que quería, porque en realidad está escribiendo las imágenes en archivos externos. – bguiz
Creo que debería ser 'saxon: base64Binary-to-octets' (con el' s' posterior). Ver http://www.saxonica.com/documentation/extensions/functions.html –
Gracias, Jackem. He corregido la muestra del código. –