我可以在xsl中使用'and'运算符吗?

时间:2010-02-08 01:21:43

标签: xml xslt xpath foreach

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

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

问:当我在for-each中使用select =“”时,它会改变我在每个内部使用的代码的选择器范围吗?

2 个答案:

答案 0 :(得分:7)

您可以在for-each循环中使用'and',但不能按照您提到的方式使用(不确定您想要实现的目标)

我认为你的要求是这样的 1)您希望遍历Trip,其子实体(instanceresult)不为空, 在这种情况下,你必须这样写..

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

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


2)您想要查找其值为非空的父instance内的每个resulttrip子项。在这种情况下,您不需要and ..

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

这样可行。

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

我希望,我理解你的问题并回答它是可以理解的..

答案 1 :(得分:6)

不,您无法在and属性中使用select

您想要使用union运算符:|,其行为类似于,有点像,具体取决于你如何看待它。

它将为您提供两个节点集的明确列表,并将按照它找到的文档顺序返回它们(不是所有instance,而是所有result元素。

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

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

访问当前节点