2016-07-05 6 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の画像出力は次のようになります。

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

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

私のXSLテンプレートは、現在、このようになります。

データからイメージ名だけを取り出し、適切な相対パスを作成するにはどうすればよいですか?

参考までに、絶対イメージはユーザーに応じて異なる可能性があります。そのため、実際のイメージとは異なる場合があります。また、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

2ctsの考え。 imgタグにはクラスが必要ないかもしれませんが、cssでは一般的なimgタグを対象にすることができます。 imgタグにさまざまなスタイルを適用したい場合を除きます。 – Loic

+0

最後にそれをテストする機会があり、それは完全に機能します!ありがとう –

関連する問題