如何解码base 64数据

时间:2009-12-25 12:05:37

标签: java xml jpeg base64

我有一个XML doucment,其中有一个像这样的图像标记

如果有图像,则标签如下

<thumbnail>
<type>IMAGE JPG</type>
<data> base64 data </data>
</thumbnail>

如果没有图像那么

<thumbnail/>

我想使用DOM解析器获取base64编码的图像 以及如何处理没有像<thumbnail/>

这样的图像的标签

在XML文档中会有任意数量的标记。

2 个答案:

答案 0 :(得分:2)

COS包有一个Base64DecoderApache Commons Codec提供了alternative。另外一个人可能会使用sun.misc.BASE64Decoder,但这会使一个人的代码特定于Sun JDK。

答案 1 :(得分:1)

作为DOM编码的替代方法,您可以在XSLT样式表中以声明方式执行此操作。

XSLT没有base64解码的任何内置功能,但你可以使用Saxon扩展函数 xs:base64Binary-to-octet 使用Java FileOutputStream将其流式传输到文件中。一个XSLT样式表:

 <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    version="2.0" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:saxon="http://saxon.sf.net/"
    xmlns:fos="java.io.FileOutputStream">

    <xsl:template match="/">
     <!--Your example did not reveal the document structure.
     Assuming thumbnail elements are children of the document element-->
  <xsl:apply-templates select="*/thumbnail" />
    </xsl:template>

    <!--For thumbnail elements that contain data, decode the BASE64 encoded content and write to file -->
    <xsl:template match="thumbnail[data]">
       <xsl:variable name="img" select="concat('c:\test\', position(), '.jpg')"/>
       <xsl:variable name="fos" select="fos:new(string($img))"/>
       <xsl:value-of select="fos:write($fos,saxon:base64Binary-to-octets(xs:base64Binary(data/text())))"/>
       <xsl:value-of select="fos:close($fos)"/>
    </xsl:template>

 <!--Do nothing with empty thumbnail elements-->
 <xsl:template match="thumbnail" />

</xsl:stylesheet>