Domanda

@Solved

Le due domande secondarie che ho creato sono state risolte (yay per averle divise!), quindi questa è stata risolta. Assegnerò il segno di spunta a samjudson , poiché la sua risposta è stata la più vicina. Per soluzioni di lavoro effettive, vedere le domande secondarie di seguito; sia le mie soluzioni implementate che le risposte verificate.

@deprecated

Sto dividendo questa domanda in due domande separate, poiché questo è un problema abbastanza complicato. Le risposte sono comunque benvenute.

Le domande sono:

  1. XSLT: converti i dati base64 in file di immagini
  2. XSLT: ottenere o abbinare hash per dati codificati in base64

Ciao, mi chiedo solo se qualcuno qui ha avuto successo nel convertire Formato di esportazione di Evernote , che è XML, in HTML comprese le immagini. So che Evernote ha una funzione di esportazione in HTML che lo fa, ma alla fine voglio fare cose più fantasiose con esso.

Sono riuscito a ottenere il testo solo usando il seguente XSLT:

Codice di esempio rimosso

Consulta le domande secondarie per le soluzioni implementate.

Tuttavia, a.t.m. questo semplicemente ignora qualsiasi immagine, ed è qui che ho bisogno di aiuto.

Stumbling block # 1 : Evernote memorizza le sue immagini come GIF o PNG e, quando viene esportato, incorpora queste ampli GIF! PNG direttamente nell'XML usando quello che sembra essere base64 (potrei sbagliarmi). Devo essere in grado di riconsegnare le immagini. Se apri il file in un editor di testo, cerca gli enormi blocchi di dati in **//note/resource/data**. Ad esempio (rientri aggiunti 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>

Stumbling block # 2 : Evernote memorizza i nomi dei file di ogni immagine nel nodo delle risorse
**//note/resource/resource-attributes/file-name**
tuttavia, nella nota in cui si riferisce all'immagine, fa riferimento all'immagine non con il nome del file, ma con il suo hash, ad esempio:

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

Qualcuno può fare luce su come gestire i dati binari codificati (base64) all'interno di XML?

Modifica

Capisco dai commenti & amp; risponde che la semplice vecchia XSLT non riuscirà a fare il lavoro gestendo le immagini. Il processore XSLT che sto usando è Xalan , tuttavia, se non va bene abbastanza ai fini dell'elaborazione delle immagini o di base64, quindi ti suggerisco di fare uno che faccia questi!

Inoltre, come richiesto, ecco un file di esportazione Evernote di esempio. Le clip di codice sopra sono solo parti selezionate di questo. L'ho rimosso in modo tale che contenga solo una nota e ne abbia modificato la maggior parte del testo, e ho aggiunto dei rientri per maggiore chiarezza.

<?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 questo deve essere trasformato in questo:

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

Con il file clip_image001.gif generato e salvato.

È stato utile?

Soluzione

Esiste una nuova specifica URI dati http://en.wikipedia.org/wiki/Data_URI_scheme che può esserti di aiuto se intendi supportare solo i browser moderni e le tue immagini sono piccole (ad esempio IE8 supporta solo < 32k immagini).

A parte questo, l'unica altra cosa che puoi fare è usare alcuni script esterni per esportare i dati dell'immagine in un file e usarli. Ciò dipende molto dal processore XSLT che stai utilizzando.

Altri suggerimenti

Esiste una risposta XSLT pura a questo problema; guarda questa pagina

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top