我有一个XML doucment,其中有一个像这样的图像标记
如果有图像,则标签如下
<thumbnail>
<type>IMAGE JPG</type>
<data> base64 data </data>
</thumbnail>
如果没有图像那么
<thumbnail/>
我想使用DOM解析器获取base64编码的图像
以及如何处理没有像<thumbnail/>
在XML文档中会有任意数量的标记。
答案 0 :(得分:2)
COS包有一个Base64Decoder。 Apache 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>