我看到的如何編碼以base64圖像文件的幾個問題,但如何對周圍的其他方式 - 我該如何重建從存儲在XML文件中的base64字符串的圖片?XSLT:的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 GIF & PNG文件格式。優選地不限於任何OS。
實施的解決方案
基於周圍Mads Hansen's溶液。主要區別是,我直接在我的命名空間中引用net.sf.saxon.value.Base64BinaryValue
而不是使用saxon
命名空間,因爲我理解的Java API比更直觀的base64Binary-to-octets
和base64Binary
功能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.請參閱sibling question以瞭解如何獲取識別圖像文件所需的散列值。
這個問題是 another question I have asked previously的子問題。
謝謝!這是我想要的,因爲它實際上是將圖像寫入外部文件。 – bguiz 2009-11-07 10:51:43
我認爲它應該是'saxon:base64Binary-to-octets'(跟着's'')。見http://www.saxonica.com/documentation/extensions/functions.html – 2009-11-07 20:53:07
謝謝,傑克姆。我已更正了代碼示例。 – 2009-11-07 21:05:14