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

标签 xslt file-io image-processing hash evernote

@解决了

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

@已弃用

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

问题是:

  • XSLT: Convert base64 data into image files
  • XSLT: Obtaining or matching hashes for base64 encoded data


  • 嗨,只是想知道这里是否有人成功转换 Evernote's export format ,这是 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 图像),这可能会有所帮助。

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

    关于xslt - Evernote 导出格式 (ENEX) 到 HTML,包括图片?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1642104/

    相关文章:

    xml - 如何在for-each循环中根据属性值放置条件

    xml - 当子元素使用 XSLT 激活时,给父元素一个类

    c# - Kinect模式识别

    algorithm - xsl 中的自定义分组

    file-io - 如何使用 Erlang OTP 模块修改文件中的一行

    c#-4.0 - 如何计算项目解决方案文件夹内的文件数?

    大块/内存管理中的python read()和write()

    python - 如何在基于Web的Python应用程序中裁剪图像?

    image - 如何从 OpenCV/EMGU 中的图像中提取线性切片

    c# - 我如何遍历 XPathNodeIterator 并随机化它的 child ?