【问题标题】:Can I use 'and' operator in xsl for-each?我可以在 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 中使用的代码的选择器范围?

【问题讨论】:

    标签: xml xslt xpath foreach


    【解决方案1】:

    您可以在 for-each 循环中使用“和”,但不能按照您提到的方式使用(不确定您到底想要实现什么)

    我假设您的要求类似于,

    1)你想循环通过Trip,其两个子实体(instanceresult)不为空, 在这种情况下,你必须这样写..

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

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


    2)您想在父 trip 中的每个 instanceandresult 孩子中寻找其值不为空的。在这种情况下,您不需要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 运算符 .. 以及“取决于您的想法”这一点
      猜你喜欢
      • 1970-01-01
      • 2013-11-04
      • 2015-12-16
      • 1970-01-01
      • 1970-01-01
      • 2021-09-11
      • 2023-03-15
      • 1970-01-01
      • 2011-10-30
      相关资源
      最近更新 更多