XSL变量似乎返回null

时间:2012-01-23 14:41:44

标签: xslt

我有DCM4CHEE DICOM project的以下XSL文件,我试图稍微调整一下。我实际上试图工作的代码被注释掉了,但即使变量赋值似乎实际上也是返回null。 DCM4CHEE日志正在抛出带有“null”的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 个答案:

答案 0 :(得分: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>

上面的代码在语法上是正确的。