Ich habe einige Fragen zur Codierung einer Bilddatei in base64 gesehen, aber wie ist es umgekehrt - wie stelle ich ein Bild aus einer Base64-Zeichenfolge in einer XML-Datei wieder her?XSLT: base64-Daten in Bilddateien umwandeln
<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>
die über XML-Knoten resource
, Bedenkt man, wie gehe ich über clip_image001.gif
zu schaffen?
Bitte machen:
- XSLT-Prozessoren und/oder Erweiterungen dies zu ermöglichen, sowie
- eine Probe XSLT, die die Umwandlung
Hinweis auslöst, dass es in der Lage sein muss, zumindest zu handhaben GIF & PNG-Dateiformate. Vorzugsweise nicht auf irgendein Betriebssystem beschränkt.
Implementiert Lösung
Basierend um Mads Hansen's Lösung. Der Hauptunterschied besteht darin, dass ich net.sf.saxon.value.Base64BinaryValue
direkt in meinem Namespace referenzierte, anstatt den Namespace saxon
zu verwenden, weil ich die Java APIs intuitiver verstand als die Beschreibungen der base64Binary-to-octets
und base64Binary
Funktionen der Saxonica Website.
<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. Siehe sibling question für meine Implementierung, wie die Hashes erhalten werden, die notwendig sind, um die Bilddateien zu identifizieren.
Diese Frage ist eine Teilfrage von another question I have asked previously.
Danke! Das ist, was ich wollte, weil es die Bilder tatsächlich in externe Dateien schreibt. – bguiz
Ich denke, es sollte 'saxon: base64Binary-to-Octets' sein (mit dem nachgestellten' s'). Siehe http://www.saxonica.com/documentation/extensions/functions.html –
Danke, Jackem. Ich habe das Codebeispiel korrigiert. –