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 =""时,它会改变我在每个内部使用的代码的选择器范围吗?
您可以在for-each循环中使用'and',但不能按照您提到的方式使用(不确定您想要实现的目标)
我假设你的要求是这样的,
1)你想循环通过Trip谁的两个子实体是(instance和result)不是null,在这种情况下,你必须像这样写.
<xsl:for-each select="trip[instance!='' and result!='']>
Run Code Online (Sandbox Code Playgroud)
如果实例和结果中的任何一个为null,那么你的循环不会进入元素,即trip.
2)你想通过每个寻求instance和result内单亲家庭子女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"..
我希望,我理解你的问题并回答它是可以理解的..
不,您不能and在select属性中使用.
你想使用union运营商:|,其行为有点像一个与和有点像一个或者,这取决于你如何看待它.
它将为您提供两个节点集的明确列表,并将按照它找到的文档顺序返回它们(不是全部instance,然后是所有result元素).
<xsl:for-each select="trip/instance[.!=''] | trip/result[.!='']">
</xsl:for-each>
Run Code Online (Sandbox Code Playgroud)
内的for-each上下文将每次迭代期间每个所选择的节点之间进行切换.您可以使用.或访问当前节点current().