使用XSLT更改图像路径



我正在使用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电脑。

可以将递归模板与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>

相关内容

  • 没有找到相关文章

最新更新