XSLT:如何在不重复代码的情况下创建条件链接

时间:2010-07-21 14:58:14

标签: html xslt

生成的HTML页面包含有时在我的页面中不存在的引用链接。我应该将此链接显示为简单标签。 目前已完成:

<xsl:choose>
 <xsl:when test="$nb_action != 0">
  <a href="#action">Action (offensive, defensive, reconnaissance)</a>
 </xsl:when>
 <xsl:otherwise>
  Action (offensive, defensive, reconnaissance)
 </xsl:otherwise>
</xsl:choose>

我想知道如何简化我的代码,如何停用节点<a></a>

我的第一个想法是委托一个特殊的css类:

<a href="#action">
 <xsl:if test="$nb_action = 0">
  <xsl:attribute name="class">inactive</xsl:attribute>
 </xsl:if>Action (offensive, defensive, reconnaissance)
</a>

但它仍然是一个链接...

以下解决方法:

<a><xsl:if test="$nb_action != 0">
  <xsl:attribute name="href">#action</xsl:attribute>
 </xsl:if>Action (offensive, defensive, reconnaissance)</a>

在没有<a>的情况下编写html href代码是正确的吗?

2 个答案:

答案 0 :(得分:2)

您可以将该Action文本作为变量。这个变量仍然出现在3个地方。

<xsl:variable name="textval">
Action (offensive, defensive, reconnaissance)</xsl:variable>
<xsl:choose>
 <xsl:when test="0">
  <a href="#action"><xsl:copy-of select="$textval"/></a>
 </xsl:when>
 <xsl:otherwise>
  <xsl:copy-of select="$textval"/>
 </xsl:otherwise>
</xsl:choose>

编辑:或者,如果你不介意额外的,无用的span标签,你可以使用

  <xsl:variable name="condition" select="---condition-here---"/>

  <xsl:variable name="tagname">
   <xsl:choose>
    <xsl:when test="$condition">a</xsl:when>
    <xsl:otherwise>span</xsl:otherwise>
   </xsl:choose>
  </xsl:variable>

  <xsl:element name="{$tagname}">
   <xsl:if test="$condition">
    <xsl:attribute name="href">#action</xsl:attribute>
   </xsl:if>
   Action (offensive, defensive, reconnaissance)
  </xsl:element>

(在Firefox中,如果我们将$tagname设置为空字符串,则该元素根本不会应用。但处理器也可以raise an error,所以不要依赖它。 )

答案 1 :(得分:0)

什么不将字符串Action(..)存储到变量中并将其存储在代码中?