2011-11-05 57 views
2

我正在處理一個數據聚合項目,我需要將來自各種數據提供程序的XML數據轉換爲通用格式,這需要數據集中的所有URI值都正確轉義。這裏是我從數據提供者接收的一個示例URI。它包含保留字符( 「[」, 「]」)在其路徑組成:使用XSLT轉義URI路徑

http://ogimages.bl.uk/images/001/001ROY000018D03U00107000[SVC1].jpg 

這是轉義形式我需要:

http://ogimages.bl.uk/images/001/001ROY000018D03U00107000%5BSVC1%5D.jpg 

我計劃使用XSLT與EXSLT encode- uri函數(http://www.exslt.org/str/functions/encode-uri/str.encode-uri.html)在轉換時轉義URI。目前我使用如下它:

xsl:value-of select="str:encode-uri(., true())"/> 

其逃脫完整的URI和

http%3A%2F%2Fogimages.bl.uk%2Fimages%2F001%2F001ROY000018D03U00107000%5BSVC1%5D.jpg 

結果這不是我所需要的,因爲我想保持URI保留字符,如果他們在正確的地方。

如果我使用的編碼,URI功能如下

xsl:value-of select="str:encode-uri(., false())"/> 

,因爲被稱爲一個布爾值false標誌時編碼-URI功能無法逃脫保留字符的括號沒有逃脫。

所以我想,我需要的是在URI的單個路徑組件上應用URI編碼。是否有任何現有的功能,或者我需要在XSL(T)中啓動URI解析?

Thx

回答

2

我認爲你需要啓動URI解析。

原因是您的數據提供者將保留的字符(例如/作爲路徑組件分隔符)與保留字符混合在一起,這些保留字符意味着一些特殊的含義(例如[)。 encode-uri()函數怎麼知道要逃避哪些以及哪個要離開?

所以是的,你需要開始解析URI。如果您確信沒有/字符需要轉義,我會

  • 副本初始http(s)://不變
  • 使用EXSLT的tokenize()通過/
  • 打破休息成路徑組件編碼-URI ()每個組件
  • 並將它們連接在一起/