我可以在xsl中执行以下操作吗?
<xsl:for-each select="trip/instance[.!=''] and trip/result[.!='']">
</xsl:for-each>
问:当我在for-each中使用select =“”时,它会改变我在每个内部使用的代码的选择器范围吗?
答案 0 :(得分:7)
您可以在for-each循环中使用'and',但不能按照您提到的方式使用(不确定您想要实现的目标)
我认为你的要求是这样的
1)您希望遍历Trip
,其子实体(instance
和result
)不为空,
在这种情况下,你必须这样写..
<xsl:for-each select="trip[instance!='' and result!='']>
如果实例和结果中的任何一个为null,那么你的循环不会进入元素,即trip。
2)您想要查找其值为非空的父instance
内的每个result
和trip
子项。在这种情况下,您不需要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()
。