我有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吗?
答案 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>
上面的代码在语法上是正确的。