2012-01-23 4 views
1

У меня есть следующий файл XSL от DCM4CHEE DICOM project, и я пытался немного его отрегулировать. Код, который я на самом деле пытаюсь получить, закомментирован, но даже присваивание переменной, по-видимому, возвращает null. Журналы DCM4CHEE бросают исключения 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() переменной, а затем передать его с параметром?

ответ

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> 

Код выше синтаксически корректен.

Смежные вопросы