Frage

@Solved

Die beiden Teilfragen habe ich erstellt wurden gelöst (zum Spalten yay dieses oben!), So dass dies ein gelöst. Ich werde vergeben das Häkchen zu samjudson , da seine Antwort in der Nähe war. obwohl für die tatsächlichen Arbeitslösungen finden Sie in den folgenden Teilfragen; meine beiden implementierten Lösungen und die überprüften Antworten.

@deprecated

Ich Aufspalten diese Frage in zwei getrennte Fragen, da dies ein ziemlich kompliziertes Problem. Antworten sind immer noch willkommen though.

Die suquestions sind:

  1. XSLT: Konvertieren von Daten in base64 Bilddateien
  2. XSLT: Beziehen oder passender Hashes für Base64-codierte Daten

Hallo, mich nur gefragt, ob hier jemand hat keinen Erfolg bei der Umwandlung von Evernote Exportformat , das ist XML, HTML, einschließlich der Bilder. Ich weiß, dass Evernote einen Export in HTML-Funktion hat, der dies tut, aber ich will schließlich mit ihm mehr fancy stuff tun.

Ich habe es geschafft nur immer den Text zu erreichen den folgenden XSLT mit:

Beispielcode entfernt

Siehe Kind Fragen für implementierten Lösungen.

Allerdings a.t.m. dies einfach ignoriert alle Bilder, und das ist, wo ich brauche Hilfe.

Hemmschuh # 1 : Evernote speichert seine Bilder als GIFs oder PNGs, und beim Export, bettet sie diese GIF-Dateien und PNG-Dateien direkt in der XML was base64 zu sein scheint (ich könnte falsch sein) . Ich muss in der Lage, die Bilder reconsitute. Wenn Sie die Datei in einem Texteditor öffnen, sucht die riesigen Datenblöcke in der **//note/resource/data**. Zum Beispiel (Einzüge manuell hinzugefügt):

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

Hemmschuh # 2 : Evernote speichert die Dateinamen jedes Bild unter dem Ressourcenknoten
**//note/resource/resource-attributes/file-name**
jedoch in der aktuellen Notiz, in der er auf das Bild bezieht, verweist sie das Bild nicht durch die Dateinamen, sondern durch seine Hash, zum Beispiel:

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

Kann jemand etwas Licht auf, wie mit (base64) befassen innerhalb XML Binärdaten codiert?

Bearbeiten

Ich verstehe, aus den Kommentaren und Antworten, die plain ol‘XSLT wird den Job nicht bekommen Bilder gemacht Handhabung. Der XSLT-Prozessor ich verwende ist Xalan jedoch, wenn dies nicht gut ist genug für die Zwecke der Bildverarbeitung oder base64, dann bin ich bitte eine vorschlagen, dass diese nicht tun!

Auch wie gewünscht, hier ist ein Beispiel Evernote Exportdatei. Die Code-Clips oben sind lediglich Teile davon ausgewählt. Ich habe es abgespeckte so daß sie nur eine Note und die meisten der Text aus ihm heraus bearbeitet und hinzugefügt Einzüge für Klarheit.

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

Und diese werden muss, in diese umgewandelt:

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

Mit der Datei clip_image001.gif erzeugt und gespeichert werden.

War es hilfreich?

Lösung

Es gibt eine neue Daten URI-Spezifikation http://en.wikipedia.org/wiki/Data_URI_scheme , die eine Hilfe sein können, vorausgesetzt, Sie beabsichtigen, nur modernen Browser zu unterstützen, und die Bilder sind klein (zB IE8 nur Unterstützung <32k Bilder).

Anders als das die einzige andere Sache, die Sie tun können, ist einige externe Skripte verwenden, um die Bilddaten zu exportieren und die Datei zu verwenden. Dies würde stark davon abhängen, welche XSLT-Prozessor Sie verwenden.

Andere Tipps

Es existiert eine reine XSLT Antwort auf diese Frage; auf dieser Seite aussehen

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top