我创建的两个子问题已经解决了(耶,把这个问题分开!),所以这个问题也解决了。我会将复选标记授予samjudson,因为他的答案是最接近的。对于实际的工作解决方案,请参阅以下子问题;我实施的解决方案和检查的答案。
我将这个问题分成两个单独的问题,因为这是一个相当复杂的问题。不过仍然欢迎回答。
问题是:
嗨,只是想知道这里是否有人成功地将 Evernote 的导出格式(XML)转换为 HTML(包括图片)。我确实知道 Evernote 有一个导出到 HTML 的功能可以做到这一点,但我最终想用它做更多奇特的事情。
我已经成功地仅使用以下 XSLT 来获取文本:
查看儿童问题以获取已实施的解决方案。
但是,a.t.m.这只是忽略任何图片,这就是我需要帮助的地方。
绊脚石#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) 编码的二进制数据吗?
我从评论和答案中了解到,普通的 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
正在生成并保存。
有一个新的数据 URI 规范 http://en.wikipedia.org/wiki/Data_URI_scheme 如果您只想支持现代浏览器并且您的图像很小(例如 IE8 仅支持<32k images).
除此之外,您唯一可以做的就是使用一些外部脚本将图像数据导出到文件并使用它们。这在很大程度上取决于您使用的 XSLT 处理器。
我刚刚制作了一个新的Python脚本来将.enex文件转换为.html,包括图像/附件等。这个脚本并不完美,但至少是一个好的开始。
https://github.com/eirikora/enex2html
下载、尝试并贡献!
最诚挚的问候, Eirik Y.Øra
对于这个问题存在一个纯 XSLT 答案; 看这个页面