Question

@Solu

Les deux sous-questions que j'ai créées ont été résolues (yay pour la division de celle-ci!), donc celle-ci est résolue. J'attribuerai la coche à samjudson , car sa réponse était la plus proche. Pour des solutions de travail réelles cependant, voir les sous-questions ci-dessous; mes solutions implémentées et les réponses vérifiées.

@Deprecated

Je divise cette question en deux questions distinctes, car il s'agit d'un problème assez compliqué. Les réponses sont toujours les bienvenues.

Les questions sont les suivantes:

  1. XSLT: convertissez les données base64 en fichiers d'image
  2. XSLT: obtention ou correspondance de hachages pour les données codées en base64

Bonjour, je me demandais si quelqu'un ici avait réussi à convertir le format d'exportation d'Evernote , qui est XML, HTML avec les images. Je sais que Evernote dispose d’une fonction d’exportation vers HTML qui le fait, mais j’aimerais par la suite vouloir en faire plus.

J'ai réussi à obtenir le texte uniquement avec le XSLT suivant:

Exemple de code supprimé

Consultez les questions enfants pour connaître les solutions mises en œuvre.

Cependant, environ cela ignore simplement les images, et c’est là que j’ai besoin d’aide.

Bloc d'achoppement # 1 : Evernote stocke ses images au format GIF ou PNG. Lorsqu'il est exporté, il incorpore ces GIF &. PNG directement dans le XML en utilisant ce qui semble être base64 (je pourrais me tromper). Je dois pouvoir reconsidérer les images. Si vous ouvrez le fichier dans un éditeur de texte, recherchez les énormes blocs de données dans **//note/resource/data**. Par exemple (retraits ajoutés manuellement):

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

Bloc de chute # 2 : Evernote stocke les noms de fichier de chaque image sous le nœud de ressource

**//note/resource/resource-attributes/file-name**
cependant, dans la note dans laquelle il fait référence à l'image, il ne fait pas référence à l'image, mais par son hachage, par exemple:

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

Quelqu'un peut-il nous expliquer comment traiter les données binaires codées (au format Base64) dans XML?

Modifier

Je comprends d'après les commentaires & amp; répond que tout simplement XSLT ne fera pas le travail de traitement des images. Le processeur XSLT que j'utilise est Xalan , mais si ce n'est pas bon assez pour les besoins du traitement d’image ou base64, alors je vous prie de suggérer celui qui les fait!

De plus, comme demandé, voici un exemple de fichier d’exportation Evernote. Les clips de code ci-dessus ne sont que des parties sélectionnées. Je l'ai réduit de manière à ce qu'il ne contienne qu'une note, en ait édité la majeure partie du texte et ajouté des tirets pour plus de clarté.

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

Et cela doit être transformé en ceci:

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

Le fichier clip_image001.gif étant généré et enregistré.

Était-ce utile?

La solution

Il existe une nouvelle spécification d'URI de données http://en.wikipedia.org/wiki/Data_URI_scheme qui peut vous être utile si vous souhaitez uniquement prendre en charge les navigateurs modernes et que vos images sont petites (par exemple, IE8 ne prend en charge que les < 32k images).

Autre que cela, la seule autre chose que vous pouvez faire est d'utiliser des scripts externes pour exporter les données d'image dans un fichier et les utiliser. Cela dépendra beaucoup du processeur XSLT que vous utilisez.

Autres conseils

Il existe une réponse XSLT pure à ce problème; regardez cette page

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top