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: est , 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>