J'ai vu plusieurs questions sur la façon d'encoder un fichier image dans base64, mais qu'en est-il de l'inverse - comment reconstituer une image à partir d'une chaîne base64 stockée dans un fichier XML?XSLT: Convertir les données de base64 en fichiers image
<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>
Étant donné le noeud XML ci-dessus resource
, comment puis-je faire pour créer clip_image001.gif
?
S'il vous plaît suggérer:
- processeurs XSLT et/ou extensions permettent cela, plus
- un XSLT exemple qui déclenche la conversion
Notez qu'il doit être capable de gérer au moins GIF & Formats de fichier PNG. De préférence non limité à tout système d'exploitation.
solution mise en œuvre
Basé autour de la solution Mads Hansen's. La principale différence étant que j'ai référencé net.sf.saxon.value.Base64BinaryValue
directement dans mon espace de noms plutôt que d'utiliser l'espace de noms saxon
, parce que j'ai mieux compris les API Java que les descriptions du site Web Saxonica des fonctions base64Binary-to-octets
et base64Binary
.
<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. Voir sibling question pour ma mise en œuvre de la façon d'obtenir les hachages nécessaires pour identifier les fichiers d'image.
Cette question est une sous-question de another question I have asked previously.
Merci! C'est ce que je voulais, car il est en train d'écrire les images dans des fichiers externes. – bguiz
Je pense qu'il devrait être 'saxon: base64Binary-to-octets' (avec le' s'). Voir http://www.saxonica.com/documentation/extensions/functions.html –
Merci, Jackem. J'ai corrigé l'exemple de code. –