7

@解决了

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

@已弃用

我将这个问题分成两个单独的问题,因为这是一个相当复杂的问题。不过,仍然欢迎回答。

问题是:

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

嗨,只是想知道这里是否有人成功地将Evernote 的导出格式(即 XML)转换为包括图片在内的 HTML。我知道 Evernote 有一个导出到 HTML 的功能,可以做到这一点,但我最终想用它做更多花哨的东西。

我已经设法仅使用以下 XSLT 完成获取文本:

示例代码已删除

有关已实施的解决方案,请参阅子问题。

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

绊脚石#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>

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

<en-media hash="4aaafc3e14314027bb1d89cf7d59a06c" type="image/gif" border="0" width="16" height="16" alt="Alt Text"/>

任何人都可以阐明如何处理 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">
            <p>Some text here (followed by the picture)
            <p><en-media hash="4aaafc3e14314027bb1d89cf7d59a06c" type="image/gif" border="0" width="16" height="16" alt="A picture"/></p>
            <p>Some more text here (preceded by the picture)
        </en-note>
    ]]></content>
    <created>20090925T063154Z</created>
    <note-attributes>
        <author/>
    </note-attributes>
    <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>
</note>

</en-export>

这需要转化为:

<html>
    <body>
        <p>Some text here (followed by the picture)
        <p><img src="clip_image001.gif" border="0" width="16" height="16" alt="A picture"/></p>
        <p>Some more text here (preceded by the picture)
    </body>
</html>

随着文件clip_image001.gif的生成和保存。

4

2 回答 2

2

There is a new Data URI specification http://en.wikipedia.org/wiki/Data_URI_scheme which may be of some help provided you are only intending to support modern browsers, and your images are small (for example IE8 only support <32k images).

Other than that the only other thing you can do is use some external scripts to export the image data to file and use them. This would depend greatly on what XSLT processor you are using.

于 2009-11-02T16:26:41.360 回答
0

它存在对这个问题的纯 XSLT 答案; 看看这个页面

于 2009-11-06T08:41:50.087 回答