我看到了一些关于如何将图像文件编码为base64的问题,但反过来呢?我该如何从存储在XML文件中的base64字符串重新构建出图片呢?
<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>
给定上述XML节点
resource
,我该如何创建clip_image001.gif
?请提供以下建议:
- XSLT处理器和/或扩展程序使其成为可能,加上
- 触发转换的示例XSLT
已实现的解决方案
基于Mads Hansen的解决方案。主要区别在于,我直接在我的命名空间中引用了net.sf.saxon.value.Base64BinaryValue
,而不是使用saxon
命名空间,因为我对Java API的理解比Saxonica网站描述的base64Binary-to-octets
和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. 请参考同类问题中的实现,以获取识别图像文件所需的哈希值。
本问题是我之前提出的另一个问题的子问题。
saxon:base64Binary-to-octets
(带有尾随的s
)。请参见http://www.saxonica.com/documentation/extensions/functions.html。 - Jukka Matilainen