2009-10-29 141 views
6

@已解決

我已經創建的兩個子問題已經解決了(分裂這一個耶!),所以這個解決了。由於他的答案是最接近的,我會將複選標記授予samjudson。但對於實際的工作解決方案,請參閱下面的子問題;我實施的解決方案和檢查的答案。Evernote導出格式(ENEX)爲HTML,包括圖片?

@Deprecated

我分裂了這個問題分成兩個獨立的問題,因爲這是一個相當複雜的問題。雖然答案仍然很受歡迎。

的suquestions是:

  1. XSLT: Convert base64 data into image files
  2. XSLT: Obtaining or matching hashes for base64 encoded data

嗨,只是想知道如果任何人在這裏已在轉換Evernote's export format任何成功,這是XML,對HTML包括圖片。我知道印象筆記有一個導出到HTML功能的功能,但是我最終想用它做更多的花哨的東西。

我已成功地完成獲取文本僅使用以下XSLT:

示例代碼刪除

參見實施的解決方案的孩子的問題。

但是,a.t.m.這只是忽略任何圖片,這是我需要幫助的地方。

絆腳石#1:Evernote的存儲其照片上的GIF或PNG,並出口時,直接在XML使用什麼似乎使用base64(我可能是錯的),這些嵌入的GIF PNG圖像&。我需要能夠重新構圖。如果您在文本編輯器中打開該文件,請查找**//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"/> 

任何人都可以闡明如何處理的(Base64)編碼中的XML二進制數據的一些光?

編輯

我從評論瞭解&答案是普通OL」 XSLT不會得到處理完成圖像的工作。我使用的XSLT處理器是Xalan,但是,如果這不足以用於圖像處理或base64的目的,那麼我建議您這樣做!

此外,根據要求,這裏是一個示例Evernote導出文件。上面的代碼片段僅僅是這個選擇的部分。我已將其刪除,使其只包含一個音符,並將其中的大部分文本編輯出來,併爲清晰起見添加縮進。

<?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正在生成並保存。

+0

順便說一句 - 沒有必要寫'',只需編寫''。另外,不要寫'',而是''。你的樣式表會更短。除非你發佈一些XML示例,否則很難提供幫助。發佈你所處的環境也很有幫助,因爲vanilla XSLT不會執行Base64編碼的字符串。 ' – Tomalak 2009-11-03 14:48:52

+0

嗨,Tomolak,謝謝你的建議。我樂於接受使用哪種XSLT處理器的建議。我還在我的原始問題中編輯了一個示例XML文件。 – bguiz 2009-11-03 23:19:32

回答

2

有一個新的數據URI規範http://en.wikipedia.org/wiki/Data_URI_scheme這可能是一些幫助,如果你只是想支持現代瀏覽器,並且你的圖像很小(例如IE8只支持< 32K圖像)。

除此之外,您唯一可以做的其他事情就是使用一些外部腳本將圖像數據導出到文件並使用它們。這很大程度上取決於您使用的XSLT處理器。

+0

嗨,山姆,謝謝你的建議。但是,我的Evernote文檔主要是各種網站的註釋剪輯,它們確實包含大於32k的圖像,所以我不認爲數據URI方案會在這裏起作用(儘管看起來非常相似)。 請推薦您使用的XSLT處理器和外部腳本,因爲我對環境非常敏感。 – bguiz 2009-11-03 23:25:21

+0

親自在C#中處理它們是因爲我是.Net開發人員,但是您可以使用Java(在這種情況下,幾乎有無限的XSLT處理器 - Saxon是最好的IMHO)。但是,每個處理器都有自己的實現擴展方法的方式。 – samjudson 2009-11-10 14:46:03

0

它對此問題存在純粹的XSLT答案; look at this page

+0

是的,我已經通過該網站copomer之前,不幸的是,它使用base64編碼字符串(而不是像圖像二進制數據)。另外,我需要一種實際生成圖像的方式(寫入文件)。 – bguiz 2009-11-06 12:12:34