2012-01-23 5 views
1

私はDCM4CHEE DICOM projectから次のXSLファイルを持っており、少し調整しようとしていました。私が実際に作業しようとしているコードはコメントアウトされていますが、変数の割り当てさえ実際にnullを返すようです。 DCM4CHEEログは、コンパイル時にXSLテンプレートから来ているように見える「null」というJava例外をスローしています。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 1つだけの単純なラインです:

<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> 

上記のコードは、構文的に正しいです。

関連する問題