使用xsl:attribute时放置子元素的位置?

时间:2015-02-05 15:54:05

标签: xml xslt

我对XSLT很陌生。我有以下代码,我确信可以更干净/干:

<xsl:choose>
    <xsl:when test="custom-link">
        <!-- Custom link -->
        <a class="no-ajax" href="{custom-link/item/@handle}">
            <img src="//images.mysite.com/2/1120/630/5{lead-image/@path}/{lead-image/filename}" alt="" />
        </a>
    </xsl:when>
    <xsl:otherwise>
        <!-- Organic link -->
        <a class="no-ajax" href="/film/{primary-category/item/@handle}/{film-title/@handle}/">
            <img src="//images.mysite.com/2/1120/630/5{lead-image/@path}/{lead-image/filename}" alt="" />
        </a>
    </xsl:otherwise>
</xsl:choose>

理想情况下,我只希望锚中的href发生变化。我读过你可以做类似的事情:

<xsl:element name="a">
    <xsl:attribute name="href">
        <xsl:choose>
            <xsl:when test="custom-link">
                <!-- Custom link -->
                <xsl:value-of select="custom-link"/></xsl:text> 
            </xsl:when>
            <xsl:otherwise>
                <!-- Organic link -->
                <xsl:value-of select="organic-link"/></xsl:text> 
            </xsl:otherwise>
        </xsl:choose>
    </xsl:attribute>
</xsl:element>

但我不太清楚如何将链接值放入。

2 个答案:

答案 0 :(得分:1)

另一种方法是使用xsl-attribute

<a class="no-ajax>
    <xsl:attribute name="href">
        <xsl:choose>
            <xsl:when test="custom-link">
                <xsl:value-of select="custom-link/item/@handle"/>
            </xsl:when>
            <xsl:otherwise>
                <xsl:value-of select="concat('/film/', primary-category/item/@handle, '/', film-title/@handle, '/')"/>
             </xsl:otherwise>
        </xsl:choose>
    </xsl:attribute>
    <img src="//images.mysite.com/2/1120/630/5{lead-image/@path}/{lead-image/filename}" alt="" />
</a>

答案 1 :(得分:1)

在离开上下文的情况下评估代码非常困难。我相信以下几点:

<a class="no-ajax">
    <xsl:attribute name="href">
        <xsl:choose>
            <xsl:when test="custom-link">
                <xsl:value-of select="custom-link/item/@handle"/>
            </xsl:when>
            <xsl:otherwise>
                <xsl:value-of select="concat('/film/', primary-category/item/@handle, '/', film-title/@handle, '/')"/>
            </xsl:otherwise>
        </xsl:choose>
    </xsl:attribute>
    <img src="//images.mysite.com/2/1120/630/5{lead-image/@path}/{lead-image/filename}" alt="" />
</a>

是您现在所拥有的简化等级 - 所以如果它能够正常工作,那么这也应该如此。但我无法测试它。