在XSLT你怎么测试,以查看是否存在变数?(In XSLT how do you test to s

2019-06-18 14:40发布

当使用XSLT你怎么测试是否本地范围的变量存在,或者是这甚至可能吗?

Answer 1:

考虑到XSLT样式表作为XML DOM,一个变量声明元素使变量可见的所有兄弟姐妹之后和他们的后裔。 这允许XSLT处理器静态分析包含可变参考,以查看是否该变量存在任何XPath; 如果在前同辈或祖先轴存在变量声明,可变基准是合法的,否则它不是。

请注意,这是完全依赖于XSLT,它是处理XML的不是结构的结构。 XSLT处理器可以如果XPath表达式使用不存在的变量,并应产生错误。

有没有办法来检查里面XSLT这种情况下,因为这种情况是不是XSLT中是合法的。 您在您的评论中所描述的sitauation - “我们的想法是设置一个标志变量,如果事情是输出,后来上显示不同的信息,如果没有什么是输出”。 - 其实应该导致一个语法错误。 举例来说,如果你做这样的事情:

<xsl:if test="some_condition">
   <!-- produce output here -->
   <xsl:variable name="flag">true</xsl:variable>
</xsl:if>
<!-- time passes -->
<xsl:if test="$flag='true'>
   <!-- wouldn't it be nice? -->
</xsl:if>

你会得到一个语法错误:第二xsl:if元素既不是变量声明的下面的兄弟姐妹和他们的后代之一。

下面是我用了相当数量的技术 - 这将产生基于各种不同的条件下,你不希望以后再检查变量输出:

<xsl:variable name="output">
   <xsl:if test="$condition1='true'">
      <p>condition1 is true</p>
   </xsl:if>
   <xsl:if test="$condition2='true'">
      <p>condition2 is true</p>
   </xsl:if>
   <xsl:if test="$condition3='true'">
      <p>condition3 is true</p>
   </xsl:if>
</xsl:variable>
<!-- we've produced the output, now let's actually *output* the output -->
<xsl:copy-of select="$output"/>
<!-- time passes -->
<xsl:if test="normalize-space($output) != ''">
   <p>This only gets emitted if $output got set to some non-empty value.</p>
</xsl:if>


Answer 2:

问这个问题说明你没有完全掌握XSLT的关键点。 :-)

它的声明:没有任何东西可以存在的,除非你声明它。 您声明一个变量,那么它的存在,你不这样做,那么它不是。

没有一次会不会有,你必须知道这一点,而编码,如果某个变量存在。

XSLT有严格范围规则,只有他们的父元素的范围内,存在的变量,(而不是所有的元素可以包含变量与开始)。 一旦你离开父元素,变量消失了。

所以,除非你指定你的问题/意图更多一些,唯一有效的回答是,这个问题是错误的。 你不能也不需要检查是否存在变量在运行时。



Answer 3:

XSL变量的作用域严格,所以你不能访问他们兄弟节点,只有孩子。 如果您正在处理使用参数,你可以使用一个全球性<xsl:param />

请参阅: http://www.stylusstudio.com/xsllist/199911/post30020.html



Answer 4:

我不认为这是可能的,但你不可能永远需要它,因为不存在的变量,除非你已经宣布它。



Answer 5:

如果你有一个变量,你可以检查它的东西,或者是“存在”做类似如下:

<xsl:choose>
    <xsl:when test="$myvar">
        This variable exists!
    </xsl:when>
    <xsl:otherwise>
        The variable doesn't exist :(
    </xsl:otherwise>
</xsl:choose>

至于它的有效性,我不能肯定。 我会告诉你,但是,我在我们的一些在工作系统的做到这一点;)



Answer 6:

最好的和快速的主意,检查walue如果它的存在,则检查它的长度

<xsl:if test="string-length(value/to/check)=0">

</xsl:if>


Answer 7:

在任何编程语言,你就会有完全一样的行为。

就拿C#。 试图在一个错误消息引用未声明的变量名的结果。 这是definetely一个程序员的错误。

为什么它会是必要的XSLT以不同的方式表现

至于“之前”想和“后来”,或关于将为了表示有不止一个值的变量中,“状态”,我们 - 所有这一切没有在XSLT定义允许的 - 而正是没有这种“功能”是什么使XSLT的不错,ellegant函数式语言它是。



文章来源: In XSLT how do you test to see if a variable exists?
标签: xml xslt