xsl:在现有XSLT中似乎没有布尔表达式时

时间:2018-06-20 12:00:18

标签: xml xslt ssis xml-parsing

在我的一个项目中,我必须扩展一些XSLT文件,这些文件是由一些第三方提供商在很早以前创建的-换句话说:我不能简单地向提供商询问更多信息。

但是,我偶然发现了以下内容:

在此项目中,大量XML文件被解释并加载到数据库中。为此,使用了诸如6个“互连” XSLT文件之类的文件,这些文件具有众多模板,变量,条件等。以下代码块让我头疼:

<xsl:variable name="Var1">
  <xsl:choose>
    <xsl:when test="SomeText">true</xsl:when>
    <xsl:otherwise>false</xsl:otherwise>
  </xsl:choose>
</xsl:variable>

据我了解(如果我没有完全误解的话),此代码用于确定新变量“ Var1”应返回哪个值。但是该部分

<xsl:when test="SomeText">

对我没有任何意义。 SomeText不是布尔表达式,不是吗?此外,它不是变量,参数或可由test =“求值的任何东西。所有具有相同名称“ SomeText”的XSLT文件中唯一的东西就是模板之一。

因此,可以xsl:when来检查模板是否被调用了吗?还是我遵循错误的线索,并且XML文件中必须包含“ SomeText”?

1 个答案:

答案 0 :(得分:2)

<xsl:when test="SomeText">true</xsl:when>

当上下文节点具有名为SomeText的子元素时,将返回 string "true"

所以,

<xsl:variable name="Var1">
  <xsl:choose>
    <xsl:when test="SomeText">true</xsl:when>
    <xsl:otherwise>false</xsl:otherwise>
  </xsl:choose>
</xsl:variable>

$Var1在上述条件下的字符串值为"true",否则为"false"