Вопрос

@Solved

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

@Deprecated

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

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

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

    Привет, просто интересно, удалось ли кому-нибудь здесь преобразовать формат экспорта 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 на эту проблему; посмотрите на эту страницу

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top