2014-01-14 52 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中解決方案很簡單,但最好不要猜測。