2014-01-14 51 views
1

我试图设置parttext到@head如果use_head="true"不存在的存在和到的<head></head>如果use_head="true"内容的变量foo或@foo是本XSLT设置取决于属性

<xsl:template match="toc_part"> 

    <xsl:variable name="artnum"> 
     <xsl:value-of select="../@num" /> 
    </xsl:variable> 

    <xsl:variable name="partnum"> 
     <xsl:value-of select="@num" /> 
    </xsl:variable> 

     <xsl:variable name="parttext"> 
      <xsl:if test="@use_head"> 
       <xsl:value-of select="head"/> 
      </xsl:if> 
      <xsl:if test="not[@use_head]"> 
       <xsl:value-of select="@head"/> 
      </xsl:if> 
     </xsl:variable> 


    <tr> 
     <td> 
        
     </td> 
     <td> 
      <a class="int" href="{$GBLfilePre}{$artnum}.html#{$artnum}{$partnum}"><xsl:text>Part </xsl:text><xsl:value-of select="$partnum" /></a> 

     </td> 
     <td> 
      <xsl:value-of select="$parttext" /> 
     </td> 
    </tr> 
</xsl:template> 

我也试过了:

<xsl:if test="@use_head"><xsl:variable name="parttext"><xsl:value-of select="head"></xsl:variable> 
<xsl:if test="not[@use_head"]><xsl:variable name="parttext"><xsl:value-of select="@head"></xsl:variable>  

给出的部分文件undefined被引用时。

回答

1

尝试:

<xsl:variable name="parttext"> 
    <xsl:choose> 
     <xsl:when test="@use_head='true'"> 
      <xsl:value-of select="head"/> 
     </xsl:when> 
     <xsl:otherwise> 
      <xsl:value-of select="@head"/> 
     </xsl:otherwise> 
    </xsl:choose> 
</xsl:variable> 
0

你在第一电流测试if语句将评估为true()如果@use_head属性存在,不管它的价值。如果你想测试评估它的值是否等于“真”,你应该使用test="@use_head='true'"

第二个if语句正在评估是否存在名为“not”的元素具有名为“use_head”的属性,因为方括号是谓词。我相信你已经打算用not()功能:not(@use_head='true')

然后,您可以使用<xsl:choose>,而不是两个,如果块:

<xsl:variable name="parttext"> 
    <xsl:choose> 
    <xsl:when test="@use_head='true'"> 
     <xsl:value-of select="head"/> 
    </xsl:when> 
    <xsl:otherwise> 
     <xsl:value-of select="@head"/> 
    </xsl:otherwise> 
    </xsl:choose> 
</xsl:variable> 
0

在XSLT 2.0:

<xsl:variable name="head" 
    select="if (@use_head='true') then head else @head"/> 

在XSLT 1.0,要么是汉森的解决方案,要么是

<xsl:variable name="head" 
    select="head[current()/@use_head='true'] | 
      @head[not(current()/@use_head='true')]"/> 

将来,请告诉我们您使用的是哪个版本的XSLT。人们可以猜测这必定是XSLT 1.0,因为在2.0中解决方案很简单,但最好不要猜测。