2014-01-17 49 views
2

我試圖從一個屬性轉換我編碼的base64 HTML內容,並將其放置在使用XLST的HTML內容中,希望有人可以提供幫助。如何將base64字符串解碼爲XSLT中的HTML內容?

我有這個字符串:

<p><b>Hello!</b><span>This is a span</span></p> 

這是base64編碼值:

PHA+PGI+SGVsbG8hPC9iPjxzcGFuPlRoaXMgaXMgYSBzcGFuPC9zcGFuPjwvcD4= 

的XML數據是這樣的:

<Data Get="True"> 
    <Result TextFlow="PHA+PGI+SGVsbG8hPC9iPjxzcGFuPlRoaXMgaXMgYSBzcGFuPC9zcGFuPjwvcD4="> 
     </Result> 
</Data> 

我最後一次嘗試使用this

fn:cast($XML/Data/Result/@TextFlow,'xs:base64Binary','xs:String',false()) 

That code send this error: 
Unknown function - Name and number or arguments do not match any function signature in the static context. 

感謝您的幫助!

+1

Base64轉換不是我通常會推薦在XSLT中執行的操作;字符構建不是XSLT會做得很好的事情。我建議你調用一個擴展函數來完成這個轉換。不幸的是,半標準EXSLT擴展集不包含該操作,因此您可能必須自己查找或編寫它,然後使用XSLT處理器的API來註冊函數,以便樣式表可以調用它。 – keshlam

+0

你當然可以用純XSLT編寫它,雖然它會相當複雜,即使你至少知道字節流的編碼始終是UTF-8(從基礎64獲取一個字符串實際上是從基礎64獲得一個字節流,然後從中獲取一個字符串,第二步取決於編碼)。 –

回答

1

XSLT沒有內置功能來執行此操作。

即將在EXPath二進制模塊:

http://expath.org/spec/binary

的集裝箱:解碼-string()函數是你所需要的。我們已經爲Saxon實施了這個功能,但它尚未集成到產品中。同時有擴展函數撒克遜:base64BinaryToString這是基本相同的:

http://www.saxonica.com/documentation/index.html#!functions/saxon/base64Binary-to-string

並且其是在撒克遜-PE可用的或更高。

這兩個函數都帶有一個類型爲xs:base64Binary的參數;要將base64中的字符串轉換爲此類型的值,可以使用構造函數xs:base64Binary(string)。當然這需要XSLT 2.0。

如果您的(已解碼的)字符串包含標記,那麼要將其複製到序列化的HTML輸出中,您將需要使用不推薦的disable-output-escaping =「yes」選項。