Формат экспорта Evernote (ENEX) в HTML, включая изображения?
-
10-07-2019 - |
Вопрос
@Solved
Два подвопроса, которые я создал, были решены (ура за разделение этого!), так что этот вопрос решен. Я поставлю галочку на samjudson , поскольку его ответ был самым близким. Для реальных рабочих решений, хотя, см. Ниже подзапросы; и мои реализованные решения и проверенные ответы.
@Deprecated
Я делю этот вопрос на два отдельных вопроса, так как это довольно сложная проблема. Ответы все еще приветствуются.
Возможны следующие варианты:
<Ол>Привет, просто интересно, удалось ли кому-нибудь здесь преобразовать формат экспорта Evernote , который является XML, в HTML, включая изображения. Я знаю, что в Evernote есть функция экспорта в HTML, которая делает это, но в конечном итоге я хочу сделать с ней более причудливые вещи.
Мне удалось получить текст только с помощью следующего XSLT:
Пример кода удален
См. дочерние вопросы для реализованных решений.
Тем не менее, это просто игнорирует любые изображения, и именно здесь мне нужна помощь.
Камень преткновения # 1 : Evernote сохраняет свои изображения в формате GIF или PNG, а при экспорте встраивает эти изображения GIF & amp; 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?
Изменить
Я так понял из комментариев & 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 поддерживает только < 32k изображений).
Кроме этого, единственное, что вы можете сделать, - это использовать некоторые внешние сценарии для экспорта данных изображения в файл и их использования. Это сильно зависит от того, какой процессор XSLT вы используете.
Другие советы
Существует чистый ответ XSLT на эту проблему; посмотрите на эту страницу