@Solved

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

@Deprecated

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

这些问题是:

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

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

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

    删除了示例代码

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

    然而,上午这完全忽略了任何图片,这就是我需要帮助的地方。

    Stumbling block #1 :Evernote将其图片存储为GIF或PNG,导出后,它会嵌入这些GIF <!>放大器; PNG直接在XML中使用看起来像base64(我可能是错的)。我需要能够重建图片。如果在文本编辑器中打开文件,请在**//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>
    

    Stumbling block #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)编码的二进制数据吗?

    修改

    我从评论中了解<!> amp;简单的回答'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仅支持<!> lt; 32k图像),这可能会有所帮助。

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

其他提示

这个问题存在纯XSLT答案; 查看此页面

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top