Формат экспорта Evernote (ENEX) в HTML, включая изображения? - PullRequest
7 голосов
/ 29 октября 2009

@ решаемые

Два подвопроса, которые я создал, были решены (ура за разделение этого!), Так что этот вопрос решен. Я поставлю галочку samjudson , так как его ответ был самым близким. Для реальных рабочих решений, хотя, см. Ниже подзапросы; и мои реализованные решения и проверенные ответы.

@ Устаревшие

Я делю этот вопрос на два отдельных вопроса, так как это довольно сложная проблема. Ответы все еще приветствуются.

Возможны следующие варианты:

  1. XSLT: преобразование данных base64 в файлы изображений
  2. XSLT: получение или сопоставление хэшей для закодированных в base64 данных
<ч />

Привет, просто интересно, удалось ли кому-нибудь здесь преобразовать формат экспорта Evernote , который представляет собой XML, в HTML, включая изображения. Я знаю, что в Evernote есть функция экспорта в HTML, которая делает это, но в конечном итоге я хочу сделать с ней более причудливые вещи.

Мне удалось получить текст только с помощью следующего XSLT:

Пример кода удален

См. Дочерние вопросы для реализованных решений.

Тем не менее, к т. Д. это просто игнорирует любые картинки, и здесь мне нужна помощь.

Камень преткновения # 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>

Камень преткновения # 2 : Evernote хранит имена файлов каждого изображения под узлом ресурса
**//note/resource/resource-attributes/file-name**
однако в фактическом примечании, в котором он ссылается на изображение, он ссылается на изображение не по имени файла, а по его хешу, например:

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

Может ли кто-нибудь пролить свет на то, как обращаться с (base64) закодированными двоичными данными внутри XML?

Редактировать

Я понимаю из комментариев и ответов, что обычный 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.

Ответы [ 2 ]

2 голосов
/ 02 ноября 2009

Существует новая спецификация Data URI http://en.wikipedia.org/wiki/Data_URI_scheme, которая может оказаться полезной, если вы собираетесь поддерживать только современные браузеры, а ваши изображения небольшие (например, IE8 поддерживает только

Кроме этого, единственное, что вы можете сделать, - это использовать некоторые внешние сценарии для экспорта данных изображения в файл и их использования. Это во многом зависит от того, какой процессор XSLT вы используете.

0 голосов
/ 06 ноября 2009

Существует чистый ответ XSLT на эту проблему; посмотрите на эту страницу

...