2016-07-05 75 views
0

我使用XSLT 1.0將XML數據輸出轉換爲HTML。數據正在從Adobe InDesign導出,並生成用戶計算機上映像位置的絕對鏈接。但是,最終的HTML文件將用於基於HTML的電子郵件系統。圖像的絕對鏈接需要轉換爲相對鏈接。是否有可能將任何絕對鏈接轉換爲基於Web的圖像文件到特定的相對鏈接?使用XSLT更改圖像路徑

的XML圖像元素看起來就像這樣:

<generic_image href="file:///MacProjects/Workflow/New%20Sample%20Data/Email_test_7-5/Surfaces/Images/Combo_logo_LO.png"></generic_image> 

所需的HTML圖像輸出應該是這樣的:

<img class="image" src="Images/Combo_logo_LO.png" style="max-width: 80%;"> 

我的XSL範本目前看起來是這樣的:

<xsl:template match="generic_image"><img class="image" src="{@href}" style="max-width: 80%;" /></xsl:template> 

如何從數據中提取圖像名稱並創建適當的相對路徑?

僅供參考,絕對圖像可以根據用戶而有所不同,因此可能與所示的不同。它也可以來自Mac或Windows電腦。

+0

查找 「XSLT 1.0字符串替換模板」。 – Tomalak

回答

1

您可以使用遞歸模板與substring-after函數結合使用。下層的想法是隻要找到任何字符串就可以提取「/」後面的任何字符串。

<xsl:template match="generic_image"> 
 
     <xsl:call-template name="getFileName"> 
 
      <xsl:with-param name="url"> 
 
       <xsl:value-of select="@href"/> 
 
      </xsl:with-param> 
 
     </xsl:call-template> 
 
    </xsl:template> 
 
    
 
    <xsl:template name="getFileName"> 
 
     <xsl:param name="url"/> 
 
     <xsl:choose> 
 
      <xsl:when test="contains($url, '/')"> 
 
       <xsl:call-template name="getFileName"> 
 
        <xsl:with-param name="url"> 
 
         <xsl:value-of select="substring-after($url, '/')"/> 
 
        </xsl:with-param> 
 
       </xsl:call-template> 
 
      </xsl:when> 
 
      <xsl:otherwise> 
 
       <img class="image" src="{$url}" style="max-width: 80%;" /> 
 
      </xsl:otherwise> 
 
     </xsl:choose> 
 
    </xsl:template>

+0

謝謝。我們會檢查出來,並讓你知道。, –

+0

2思想。 img標籤可能不需要類,因爲您可以在CSS中定位通用img標籤。除非你想在img標籤上應用不同的樣式。 – Loic

+0

終於有機會測試它,它完美的工作!謝謝 –