相关疑难解决方法(0)

在Java中,如何将字节数组转换为十六进制数字字符串,同时保持前导零?

我正在使用一些示例java代码来制作md5哈希.一部分将结果从字节转换为十六进制数字的字符串:

byte messageDigest[] = algorithm.digest();     
StringBuffer hexString = new StringBuffer();
for (int i=0;i<messageDigest.length;i++) {
    hexString.append(Integer.toHexString(0xFF & messageDigest[i]));
    }
Run Code Online (Sandbox Code Playgroud)

但是,由于toHexString显然会从前导零中掉落,所以它并不常用.那么,从字节数组到保持前导零的十六进制字符串的最简单方法是什么?

java hex md5

159
推荐指数
13
解决办法
17万
查看次数

XSLT:将base64数据转换为图像文件

我已经看到了几个关于如何在base64中编码图像文件的问题,但是反过来如何 - 如何从存储在XML文件中的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>
Run Code Online (Sandbox Code Playgroud)

鉴于上述XML节点resource,我该如何创建clip_image001.gif

请建议:

  1. XSLT处理器和/或扩展支持此功能
  2. 触发转换的示例XSLT

请注意,它必须至少能够处理GIF和PNG文件格式.优选地,不限于任何OS.


实施解决方案

基于Mads Hansen的解决方案.主要区别在于我net.sf.saxon.value.Base64BinaryValue直接在我的命名空间中引用而不是使用saxon命名空间,因为我比Saxonica网站对函数base64Binary-to-octetsbase64Binary函数的描述更直观地理解Java API .

<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>
...
Run Code Online (Sandbox Code Playgroud)

PS请参阅兄弟问题,了解如何获取识别图像文件所需的哈希值.


这个问题是我之前提出另一个问题一个问题.

xslt file-io base64 image-processing evernote

8
推荐指数
2
解决办法
2万
查看次数

Evernote导出格式(ENEX)到HTML,包括图片?

@解决了

我创建的两个子问题已经解决了(可以解决这个问题!),这个问题就解决了.我会将复选标记给samjudson,因为他的答案是最接近的.但是,对于实际工作的解决方案,请参阅以下子问题; 我实施的解决方案和检查的答案.

@Deprecated

我将这个问题分成两个单独的问题,因为这是一个相当复杂的问题.答案仍然是受欢迎的.

这些问题是:

  1. XSLT:将base64数据转换为图像文件
  2. XSLT:获取或匹配base64编码数据的哈希值

嗨,只是想知道是否有人在将Evernote的导出格式(即XML)转换为HTML(包括图片)方面取得了成功.我知道Evernote有一个导出到HTML功能,但是我最终想用它来做更多花哨的东西.

我设法只使用以下XSLT获取文本:

示例代码已删除

查看实施解决方案的子问题.

但是,这只是忽略了任何图片,这就是我需要帮助的地方.

绊脚石#1:Evernote将其图片存储为GIF或PNG,并在导出时,使用看似base64(我可能错误)将这些GIF和PNG直接嵌入XML中.我需要能够重建图片.如果您在文本编辑器中打开文件,请在中查找大量数据**//note/resource/data**.例如(手动添加缩进):

<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>
Run Code Online (Sandbox Code Playgroud)

绊脚石#2:Evernote将每个图片的文件名存储在资源节点
**//note/resource/resource-attributes/file-name**
下,但是,在它引用图片的实际注释中,它不是通过文件名引用图片,而是通过其哈希引用图片,例如:

<en-media hash="4aaafc3e14314027bb1d89cf7d59a06c" type="image/gif" border="0" width="16" height="16" alt="Alt Text"/>
Run Code Online (Sandbox Code Playgroud)

任何人都可以阐明如何在XML中处理(base64)编码的二进制数据?

编辑

我从评论和答案中了解到,简单的'XSLT将无法完成处理图像的工作.我使用的XSLT处理器是Xalan,但是,如果这对于图像处理或base64来说还不够好,那么我建议你做一个这样做!

此外,根据要求,这是一个示例Evernote导出文件.上面的代码片段仅仅是其中的一部分.我已将其剥离,使其仅包含一个注释并编辑其中的大部分文本,并为了清晰起见添加了缩进.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE en-export SYSTEM "http://xml.evernote.com/pub/evernote-export.dtd">
<en-export export-date="20091029T063411Z" application="Evernote/Windows" version="3.0">

<note>
    <title>A title here</title>
    <content><![CDATA[
        <?xml version="1.0" encoding="UTF-8"?>
        <!DOCTYPE en-note SYSTEM "http://xml.evernote.com/pub/enml.dtd">
        <en-note bgcolor="#FFFFFF"> …
Run Code Online (Sandbox Code Playgroud)

xslt hash file-io image-processing evernote

7
推荐指数
1
解决办法
6379
查看次数

标签 统计

evernote ×2

file-io ×2

image-processing ×2

xslt ×2

base64 ×1

hash ×1

hex ×1

java ×1

md5 ×1