如何使用xsl重定向到外部URL

时间:2015-01-28 16:10:02

标签: xml xslt

我想从html中作为标签的href传递的相对网址重定向到外部网址: 我有以下xml代码

  <links>
     <link id="faq" text="F.A.Q." url="en/faq/" external="true" />
     <link id="contactUs" text="Contacts" url="en/company/contacts/" external="true" />
     <link id="termsAndConditions" text="Terms and Conditions" url="en/terms/" external="true" />
  </links>

以及以下xslt转换来获取HTML:

            <a href="{@url}" title="{@text}" class="page__footer__nav__link">
                <xsl:if test="@external = 'true'">
                   <xsl:attribute name="target">_blank</xsl:attribute>
                </xsl:if>
                 <xsl:value-of select="@text" />
            </a>

HTML必须是这样的:

<a href="domain/en/faq" target="_blank" />

用于三个锚标记

1 个答案:

答案 0 :(得分:0)

将域字符串存储在参数中,并使用concat()生成结果URL。

XSLT样式表

<?xml version="1.0" encoding="UTF-8" ?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">

    <xsl:output method="html" encoding="UTF-8" indent="yes" />

    <xsl:param name="domain" select="'www.example.com/'"/>

    <xsl:template match="/links">
      <hmtl>
        <xsl:apply-templates/>
      </hmtl>
    </xsl:template>

    <xsl:template match="link">
        <a href="{concat($domain,@url)}" title="{@text}" class="page__footer__nav__link">
            <xsl:if test="@external = 'true'">
                <xsl:attribute name="target">_blank</xsl:attribute>
            </xsl:if>
            <xsl:value-of select="@text" />
        </a>
    </xsl:template>

</xsl:transform>

HTML输出

<hmtl>
   <a href="www.example.com/en/faq/" title="F.A.Q." class="page__footer__nav__link" target="_blank">F.A.Q.</a>
   <a href="www.example.com/en/company/contacts/" title="Contacts" class="page__footer__nav__link" target="_blank">Contacts</a>
   <a href="www.example.com/en/terms/" title="Terms and Conditions" class="page__footer__nav__link" target="_blank">Terms and Conditions</a>  
</hmtl>