Переменная XSL, кажется, возвращает ноль - PullRequest
1 голос
/ 23 января 2012

У меня есть следующий XSL-файл из проекта DCM4CHEE DICOM , и я пытался немного его настроить. Код, который я на самом деле пытаюсь заставить работать, закомментирован, но даже присвоение переменной, кажется, фактически возвращает нуль. Журналы DCM4CHEE генерируют исключения Java с нулевым значением, которое, похоже, приходит из шаблона XSL при его компиляции.

<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 Ответ

1 голос
/ 23 января 2012
<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 , единственный разрешенный элемент как дочерний элемент 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>

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...