Reputation: 13
I have an XML doucment in which there is an tag for image like this
if there is an image then the tag would be as follows
<thumbnail>
<type>IMAGE JPG</type>
<data> base64 data </data>
</thumbnail>
And if there is no image then
<thumbnail/>
I want to get the base64 encoded image using DOM parser
and how to handle tags which don't have any image like <thumbnail/>
In the XML document there will be any number of tags.
Upvotes: 1
Views: 2121
Reputation: 272307
The COS package has a Base64Decoder. Apache Commons Codec offers an alternative. Also one may use sun.misc.BASE64Decoder
, but that makes one's code Sun JDK-specific.
Upvotes: 2
Reputation: 66723
As an alternative to DOM coding, you could do it declaratively in an XSLT stylesheet.
XSLT does not have any built-in features to base64 decode, but you can use the Saxon extension function xs:base64Binary-to-octet to stream it out to a file using the Java FileOutputStream in an XSLT stylesheet:
<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>
Upvotes: 1