2012-01-23 77 views
1

我從DCM4CHEE DICOM project有以下XSL文件,我試圖稍微調整它。我實際上正在努力工作的代碼已被註釋掉,但即使是變量賦值似乎實際上也會返回null。 DCM4CHEE日誌正在拋出帶有'null'的Java異常,它在編譯時似乎來自XSL模板。XSL變量似乎返回null

<xsl:call-template name="attr"> 
     <xsl:with-param name="tag" select="'00100040'"/> 
     <xsl:with-param name="vr" select="'CS'"/> 

     <xsl:variable name="testing" select="string(field[8]/text())" />  
     <xsl:with-param name="val" select="$testing" /> 

     <!-- 
     <xsl:variable name="sexString" select="string(field[8]/text())" /> 
     <xsl:variable name="sex"> 
      <xsl:choose> 
      <xsl:when test="$sexString='1'">M</xsl:when> 
      <xsl:when test="$sexString='2'">F</xsl:when> 
      <xsl:when test="$sexString='9'">U</xsl:when> 
      <xsl:otherwise> 
       <xsl:value-of select="$sexString"/> 
      </xsl:otherwise> 
      </xsl:choose> 
     </xsl:variable> 

     <xsl:with-param name="val" select="$sex" /> --> 

</xsl:call-template> 

正常XSL只是一條簡單的直線:

<xsl:with-param name="val" select="string(field[8]/text())" /> 

我可能做一些非常錯誤的,但有人可以解釋爲什麼我不能夠分配給field[8]/text()一個變量,然後將它傳遞給with-param?

回答

1
<xsl:call-template name="attr"> 
     <xsl:with-param name="tag" select="'00100040'"/> 
     <xsl:with-param name="vr" select="'CS'"/> 
     <xsl:variable name="testing" select="string(field[8]/text())" /> 
     <xsl:with-param name="val" select="$testing" /> 
</xsl:call-template> 

我可能做一些非常錯誤的,但有人可以解釋爲什麼 我不能夠分配給field[8]/text()一個變量,然後將它傳遞 到with-param

是的,代碼是如此的錯誤,XSLT處理器應該拋出一個錯誤信息而不編譯/執行它。

按照W3C XSLT 1.0 specification,只允許元素的xsl:call-template孩子xsl:with-param

提交的代碼通過將其他元素(xsl:variable)作爲子元素xsl:call-template)明顯違反了這個語法規則。

:出(前)將變量xsl:call-template

<xsl:variable name="testing" select="string(field[8]/text())" /> 

<xsl:call-template name="attr"> 
    <xsl:with-param name="tag" select="'00100040'"/> 
    <xsl:with-param name="vr" select="'CS'"/> 
    <xsl:with-param name="val" select="$testing" /> 
</xsl:call-template> 

上面的代碼語法上是正確。