Xml xsl:在现有XSLT中似乎没有布尔表达式时
在我的一个项目中,我必须扩展一些XSLT文件,这些文件是很久以前由某个第三方提供商创建的——换句话说:我不能简单地要求提供商提供更多信息 然而,我偶然发现了以下几点: 在这个项目中,大量的XML文件被解释并加载到数据库中。为了做到这一点,我们使用了类似6个“相互链接”的XSLT文件,这些文件具有大量的模板、变量、条件等。下面的代码块让我头疼:Xml xsl:在现有XSLT中似乎没有布尔表达式时,xml,xslt,ssis,xml-parsing,Xml,Xslt,Ssis,Xml Parsing,在我的一个项目中,我必须扩展一些XSLT文件,这些文件是很久以前由某个第三方提供商创建的——换句话说:我不能简单地要求提供商提供更多信息 然而,我偶然发现了以下几点: 在这个项目中,大量的XML文件被解释并加载到数据库中。为了做到这一点,我们使用了类似6个“相互链接”的XSLT文件,这些文件具有大量的模板、变量、条件等。下面的代码块让我头疼: <xsl:variable name="Var1"> <xsl:choose> <xsl:when test="
<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=“”计算的变量、参数或任何东西。所有XSLT文件中唯一具有相同名称“SomeText”的是其中一个模板
那么,xsl:when
是否可以用这种方式来检查模板是否被调用?或者我是否遵循了错误的线索,并且“SomeText”必须是XML文件中的某个内容
<xsl:when test="SomeText">true</xsl:when>
$Var1
对于上述条件,字符串值为“true”
,而为“false”“
否则。在定义了Var1
的地方,SomeText
是否与基于XPath上下文的任何XML中的节点相对应?这是一个有效的检查,如果节点存在,测试将返回true
,否则false
,然后在Var1
@AniketV中设置值。我在任何XML文件中都找不到同名的节点。但我只检查了1000个中的800个。。。是否还有任何其他接收到的节点会使此检查有效?是否也可以检查同名模板?据我所知,被调用的模板依赖于另一个条件。一个模板与SomeText同名…@Tyron78-只有XML中名为SomeText
的元素的存在才可能将其设置为“true”(即使这样,它也必须是当前匹配节点的子节点)。如果有一个名为SomeText
的模板,那么它不会有任何区别。可能是编写原始XSLT的人弄糊涂了……?谢谢。如果有的地方,我会尝试搜索1000个文件,谢谢。如果有
<xsl:variable name="Var1">
<xsl:choose>
<xsl:when test="SomeText">true</xsl:when>
<xsl:otherwise>false</xsl:otherwise>
</xsl:choose>
</xsl:variable>