gpt4 book ai didi

xml - xslt编程时 'or'和 '|'有什么区别?

转载 作者:数据小太阳 更新时间:2023-10-29 02:18:35 25 4
gpt4 key购买 nike

我最近一直在使用 xslt,我一直无法理解 | 之间的区别。和或以及我什么时候应该使用哪个。我知道我可以只使用错误消息来确定我需要使用哪一个,但我有兴趣了解为什么我不能使用一个或另一个。

谁能帮我指出正确的方向,让我可以了解其中的区别?

最佳答案

| 关注的是节点,or 关注的是“真”,即 bool 值。

解释

|union 运算符

此运算符返回两个序列的并集,在本例中,这两个序列被解释为两组节点。一个有趣的细节是联合运算符会删除任何重复的节点。此外,它只接受 node()* 类型的操作数,即节点序列。节点按文档顺序返回。

or 运算符

此运算符的技术术语是 bool 析取。它有两个参数,这两个参数都必须分别计算为 bool 值(“true”或“false”)。或者,更准确地说, 的操作数通过将它们转换为 xs:boolean 来判断它们的有效 bool 值。顺便说一下,所有这些也适用于 运算符。

例子

使用 union 运算符扩大一组节点,通常在模板匹配中:

<xsl:template match="Root|Jon">

为什么不在这里使用操作符呢?因为 match 属性需要一组节点作为它的值。 union 返回一组节点,而 or 运算符返回 bool 值。您不能为 bool 值定义模板匹配。


在XSLT代码中使用or操作符实现alternatives,主要使用xsl:ifxsl:choose:

<xsl:if test="$var lt 354 or $var gt 5647">

如果此 操作的两个操作数中的任何一个计算为 true,则 xsl:if 的内容也将被计算.但不仅像“小于”(lt) 这样的比较具有 bool 值,下面的比较也是完全合法的:

<xsl:if test="$var1 or $var2">

如果两个变量中至少有一个是非空序列,则以上表达式的计算结果仅为 true。这是因为空序列被定义为具有 false 的有效 bool 值。


强制

请注意,由于 XSLT 将事物强制转换为适当类型的方式,因此在某些情况下可以使用任一运算符。考虑这两个条件:

<xsl:if test="Root | Jon"> ... <xsl:if>

<xsl:if test="Root or Jon"> ... <xsl:if>

第一个条件测试名为 Root 的子集和名为 Jon 的子集的并集是否非空。表达式 Root | Jon 返回一个节点序列,然后该序列被强制转换为一个 bool 值,因为 if 需要一个 bool 值;如果序列非空,则有效 bool 值为真。

第二个条件测试两组 child (名为 Root 的 child 和名为 Jon 的 child )中的任何一个是否为非空。表达式 Root or Jon 返回一个 bool 值,并且由于运算符 or 需要 bool 参数,所以这两个集合都被强制转换为 bool 值,然后 or 运算符被应用。

结果是相同的,但是(如您所见)这两个表达式以略有不同的方式达到该结果。

关于xml - xslt编程时 'or'和 '|'有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25407504/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com