@ решаемые
Два подвопроса, которые я создал, были решены (ура за разделение этого!), Так что этот вопрос решен. Я поставлю галочку samjudson , так как его ответ был самым близким. Для реальных рабочих решений, хотя, см. Ниже подзапросы; и мои реализованные решения и проверенные ответы.
@ Устаревшие
Я делю этот вопрос на два отдельных вопроса, так как это довольно сложная проблема. Ответы все еще приветствуются.
Возможны следующие варианты:
- XSLT: преобразование данных base64 в
файлы изображений
- 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
.