我可以在 xsl for-each 中使用“和”运算符吗?

Posted

技术标签:

【中文标题】我可以在 xsl for-each 中使用“和”运算符吗?【英文标题】:Can I use 'and' operator in xsl for-each? 【发布时间】:2011-01-14 05:12:36 【问题描述】:

我可以在 xsl 中执行以下操作吗?

 <xsl:for-each select="trip/instance[.!=''] and trip/result[.!='']">
 </xsl:for-each>

问:当我在 for-each 中使用 select="" 时,它是否会改变我在 for-each 中使用的代码的选择器范围?

【问题讨论】:

【参考方案1】:

您可以在 for-each 循环中使用“和”,但不能按照您提到的方式使用(不确定您到底想要实现什么)

我假设您的要求类似于, 1)你想循环通过Trip,其两个子实体(instanceresult)不为空, 在这种情况下,你必须这样写..

<xsl:for-each select="trip[instance!='' and result!='']>

如果instance和result中的任何一个为null,那么你的循环不会进入元素,即trip。

2)您想在父 trip 中的每个 instanceandresult 孩子中寻找其值不为空的。在这种情况下,您不需要and ..

<xsl:for-each select="trip/instance[.!=''] | trip/result[.!='']">

这会起作用。

现在回答你的问题 .. 使用 FOR-EACH 循环,您可以设置选择器的范围 .. 例如:在情况(1)中,选择器的范围是“root_name//trip”,在情况(2)中,选择器的范围是“root_name//trip/instance”也是“root_name//trip/result”..

我希望,我正确理解了您的问题,并以可以理解的方式回答了它..

【讨论】:

【参考方案2】:

不,您不能在select 属性中使用and

您想使用union 运算符:|,其行为有点像 and 和有点像 or,具体取决于您的想法关于它。

它将为您提供两组节点的不同列表,并将按照找到它们的文档顺序返回它们(不是所有instance,然后是所有result元素)。

 <xsl:for-each select="trip/instance[.!=''] | trip/result[.!='']">
 </xsl:for-each>

for-each 内部,上下文将在每次迭代期间在每个选定节点之间切换。您可以使用.current() 访问当前节点。

【讨论】:

+1 用于解释 UNION 运算符 .. 以及“取决于您的想法”这一点

以上是关于我可以在 xsl for-each 中使用“和”运算符吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何计算没有。 xsl:choose 语句在 xsl:for-each 中执行的次数?

XSL 风格:在 XSLT 中使用 <xsl:for-each select> 或 <xsl:template match> 或其他解决方案?

xsl for-each多重结果过滤

xslt for-each 和排序问题

XSLT for-each 无法提取值

如何在xsl中检查for-each是否为空?