【问题标题】:Evernote export format (ENEX) to HTML, including pictures?Evernote 将格式 (ENEX) 导出为 HTML,包括图片?
【发布时间】:2009-10-29 07:25:11
【问题描述】:

@已解决

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

@已弃用

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

问题是:

  1. XSLT: Convert base64 data into image files
  2. XSLT: Obtaining or matching hashes for base64 encoded data

您好,只是想知道这里是否有人成功地将Evernote's export format(即 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>

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

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

谁能解释一下如何在 XML 中处理 (base64) 编码的二进制数据?

编辑

我从 cmets 和答案中了解到,普通的 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

【问题讨论】:

  • 顺便说一句 - 不需要写&lt;xsl:element name="tr"&gt;,只需写&lt;tr&gt;。另外,不要写&lt;xsl:attribute name="{'bgcolor'}"&gt;,而是&lt;td bgcolor="#AADDFF"&gt;。您的样式表会更短。除非您发布一些示例 XML,否则很难提供帮助。发布您所处的环境也很有帮助,因为 vanilla XSLT 不使用 Base64 编码的字符串。 `
  • 您好 Tomolak,感谢您的建议。我愿意接受有关使用哪种 XSLT 处理器的建议。我还在对原始问题的编辑中发布了一个示例 XML 文件。

标签: xslt file-io image-processing hash evernote


【解决方案1】:

有一个新的数据 URI 规范 http://en.wikipedia.org/wiki/Data_URI_scheme 如果您只打算支持现代浏览器并且您的图像很小(例如 IE8 仅支持

除此之外,您唯一能做的就是使用一些外部脚本将图像数据导出到文件并使用它们。这在很大程度上取决于您使用的 XSLT 处理器。

【讨论】:

  • 嗨,山姆,感谢您的建议。然而,我的 Evernote 文档主要是各种网站的注释剪辑,它们确实包含 > 32k 的图像,所以我认为数据 URI 方案在这里没有帮助(尽管看起来非常相似)。请建议您将使用的 XSLT 处理器和外部脚本,因为我对环境很敏感。
  • 好吧,我个人会在 C# 中处理它们,因为我是一名 .Net 开发人员,但您可以使用 Java(在这种情况下,几乎有无限的 XSLT 处理器 - Saxon 是最好的恕我直言)。然而,每个处理器都有自己实现扩展方法的方式。
【解决方案2】:

这个问题有一个纯粹的 XSLT 答案; look at this page

【讨论】:

  • 是的,我之前在那个网站上遇到过,不幸的是,它使用 base64 来编码字符串(而不是像图像这样的二进制数据)。另外,我需要一种方法来实际生成图像(写入文件)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-12
  • 1970-01-01
  • 2011-06-04
  • 1970-01-01
  • 1970-01-01
  • 2023-03-03
相关资源
最近更新 更多