7

@解決済み

私が作成した2つのサブ質問は解決されたので(これを分割してください!)、これは解決されました。samjudsonの答えが最も近いので、私はsamjudsonにチェックマークを付けます。ただし、実際に機能するソリューションについては、以下のサブ質問を参照してください。実装したソリューションとチェックした回答の両方。

@非推奨

これはかなり複雑な問題であるため、この質問を2つの別々の質問に分割しています。答えはまだ大歓迎です。

疑惑は次のとおりです。

  1. XSLT:base64データを画像ファイルに変換します
  2. XSLT:base64でエンコードされたデータのハッシュを取得または照合する

こんにちは。ここにいる誰かが、 Evernoteのエクスポート形式であるXMLを写真を含むHTMLに変換することに成功したかどうか疑問に思っています。Evernoteにこれを行うHTML関数へのエクスポートがあることは知っていますが、最終的にはもっと凝ったことをしたいと思っています。

次のXSLTのみを使用してテキストを取得することができました。

サンプルコードが削除されました

実装されたソリューションについては、子の質問を参照してください。

ただし、atmは単に写真を無視するため、ここでサポートが必要です。

つまずきのブロック#1:Evernoteは画像をGIFまたはPNGとして保存し、エクスポートすると、base64のように見えるものを使用してこれらのGIFとPNGをXMLに直接埋め込みます(間違っている可能性があります)。写真を再構成できるようにする必要があります。テキストエディタでファイルを開く場合は、でデータの巨大なブロックを探します**//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"/>

XML内で(base64)エンコードされたバイナリデータを処理する方法に誰かが光を当てることができますか?

編集

コメントと回答から、単純なol'XSLTでは画像の処理が完了しないことがわかります。私が使用しているXSLTプロセッサはXalanですが、これが画像処理やbase64の目的に十分でない場合は、これらを実行するものを提案してください。

また、ご要望に応じて、Evernoteのエクスポートファイルのサンプルをご紹介します。上記のコードクリップは、これの一部にすぎません。メモが1つだけ含まれるように削除し、ほとんどのテキストを編集して、わかりやすくするためにインデントを追加しました。

<?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が生成され、保存されます。

4

2 に答える 2

2

新しいデータURI仕様http://en.wikipedia.org/wiki/Data_URI_schemeがあります。これは、最新のブラウザーのみをサポートすることを意図しており、画像が小さい場合(たとえば、IE8は32k未満の画像のみをサポートする場合)に役立つ可能性があります。 )。

それ以外にできることは、外部スクリプトを使用して画像データをファイルにエクスポートして使用することだけです。これは、使用しているXSLTプロセッサに大きく依存します。

于 2009-11-02T16:26:41.360 に答える
0

この問題に対する純粋なXSLTの答えが存在します; このページを見てください

于 2009-11-06T08:41:50.087 に答える