使用XSLT更改图像路径

时间:2016-07-05 18:46:00

标签: html xml xslt-1.0

我正在使用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计算机。

1 个答案:

答案 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>