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

@Solved

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

@Deprecated

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

suquestions являются:

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

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

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

пример кода удалены

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

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

камень преткновения #1: Evernote хранит свои фотографии в виде GIFs или PNGs, а также при экспорте он вставляет эти GIFs & PNGs непосредственно в XML, используя то, что кажется base64 (я мог ошибаться). Мне нужно быть в состоянии reconsitute фотографии. Если вы открываете файл в текстовом редакторе, ищите огромные блоки данных в **//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?

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

Я понимаю из комментариев и ответов, что простой ol ' XSLT не будет выполнять работу с изображениями. Процессор XSLT я использую отключено, однако, если это недостаточно хорошо для целей обработки изображений или 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 ответов


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

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


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