我正在使用XSLT 1.0将XML数据输出转换为HTML。数据从Adobe InDesign导出,并生成到用户计算机上图像位置的绝对链接。但是,最终的HTML文件将用于基于HTML的电子邮件系统。需要将图像的绝对链接转换为相对链接。是否可以将任何绝对链接转换为基于Web的图像文件到特定的相对链接?
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 :(得分: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>