Pergunta

@Solved

Os dois sub-perguntas que eu criei foram resolvidos (yay para dividir até um presente!), Então este é resolvido. Vou conceder a marca de verificação para samjudson , já que sua resposta era o mais próximo. Para soluções reais de trabalho, porém, ver a seguir subquestões; minhas duas soluções implementadas e as respostas verificadas.

@deprecated

Estou dividir esta questão em duas questões distintas, uma vez que este é um problema bastante complicado. As respostas ainda são bem-vindos embora.

Os suquestions são:

  1. XSLT: dados Convert base64 em arquivos de imagem
  2. XSLT: Obtenção ou correspondentes hashes para os dados de base64 codificado

Oi, me perguntando se alguém aqui tem tido algum sucesso na conversão do Evernote formato de exportação , que é XML, para HTML, incluindo as imagens. Eu sei que Evernote tem uma exportação para a função HTML que faz isso, mas eu finalmente quero fazer mais coisas extravagantes com ele.

Eu consegui realizar recebendo o texto usando apenas o seguinte XSLT:

Exemplo de código removido

Veja criança perguntas para soluções implementadas.

No entanto, atm isso simplesmente ignora quaisquer imagens, e é aí que eu preciso de ajuda.

Pedra de tropeço # 1 : Evernote armazena suas imagens como GIFs ou PNGs, e quando exportado, ele incorpora esses GIFs e PNGs diretamente no XML usando o que parece ser base64 (posso estar errado) . Eu preciso ser capaz de reconsitute as imagens. Se você abrir o arquivo em um editor de texto, olhar para os grandes blocos de dados no **//note/resource/data**. Por exemplo (travessões adicionado manualmente):

<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>

Pedra de tropeço # 2 : lojas Evernote os nomes de cada imagem sob o nó de recursos Ficheiro **//note/resource/resource-attributes/file-name**
no entanto, na nota de real no que se refere à imagem, ele faz referência a imagem não pelo nome do arquivo, mas por seu hash, por exemplo:

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

Alguém pode lançar alguma luz sobre como lidar com (base 64) codificado dados binários dentro XML?

Editar

Eu entendo a partir dos comentários e respostas que ol liso XSLT' não vai fazer o trabalho manipulação de imagens. O processador XSLT que estou usando é Xalan , no entanto, se isso não é bom o suficiente para fins de processamento de imagem ou base64, então estou por favor sugerir um que faz fazer estes!

Além disso, conforme solicitado, aqui está uma amostra de arquivo de exportação Evernote. Os clipes de código acima são meramente selecionado partes deste. Eu despojado-lo para baixo de forma a conter apenas uma nota e editado maior parte do texto fora dele, e acrescentou travessões para maior clareza.

<?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>

e isso precisa ser transformado em isto:

<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>

Com a clip_image001.gif arquivo que está sendo gerado e salvo.

Foi útil?

Solução

Há uma nova especificação de dados URI http://en.wikipedia.org/wiki/Data_URI_scheme , que pode ser de alguma ajuda fornecida só está pretendendo apoiar os navegadores modernos, e suas imagens são pequenos (por exemplo IE8 só suportam <32K imagens).

Além de que a única outra coisa que você pode fazer é usar alguns scripts externos para exportar os dados de imagem para o arquivo e usá-los. Isso depender muito do que o processador XSLT que você está usando.

Outras dicas

Ela existe uma resposta XSLT puro para esta questão; olhada nesta página

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top