我可以在 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
,其两个子实体(instance
和result
)不为空,
在这种情况下,你必须这样写..
<xsl:for-each select="trip[instance!='' and result!='']>
如果instance和result中的任何一个为null,那么你的循环不会进入元素,即trip。
2)您想在父 trip
中的每个 instance
andresult
孩子中寻找其值不为空的。在这种情况下,您不需要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> 或其他解决方案?