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

Maz*_*zzi 9 xml xslt foreach xpath

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

 <xsl:for-each select="trip/instance[.!=''] and trip/result[.!='']">
 </xsl:for-each>
Run Code Online (Sandbox Code Playgroud)

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

Inf*_*nd' 8

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

我假设你的要求是这样的,

1)你想循环通过Trip谁的两个子实体是(instanceresult)不是null,在这种情况下,你必须像这样写.

<xsl:for-each select="trip[instance!='' and result!='']>
Run Code Online (Sandbox Code Playgroud)

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


2)你想通过每个寻求instanceresult内单亲家庭子女trip,其值不为空.在这种情况下,你不需要and..

<xsl:for-each select="trip/instance[.!=''] | trip/result[.!='']">
Run Code Online (Sandbox Code Playgroud)

这会奏效.

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

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


Mad*_*sen 6

不,您不能andselect属性中使用.

你想使用union运营商:|,其行为有点像一个和有点像一个或者,这取决于你如何看待它.

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

 <xsl:for-each select="trip/instance[.!=''] | trip/result[.!='']">
 </xsl:for-each>
Run Code Online (Sandbox Code Playgroud)

内的for-each上下文将每次迭代期间每个所选择的节点之间进行切换.您可以使用.或访问当前节点current().