首页 > 解决方案 > 嵌套表达式和相对笛卡尔积

问题描述

我已经看到可以 使用For Expression在 XPath 中做一个笛卡尔积。例如,给定以下输入:

<people>
    <group>
        <her>Alex</her>
        <him>Bert</him>
        <her>Cora</her>
        <him>Drew</him>
    </group>
    <group>
        <her>Edna</her>
        <him>Fred</him>
        <him>Gary</him>
    </group>
    <group>
        <her>Hope</her>
    </group>
</people>

我可以使用以下方法将每个与每个配对:

for $her in /people/group/her, 
    $him in /people/group/him
return ($her/text(), $him/text())

由于两个绑定序列共享(唯一)根,我认为下面的表达式应该等同于前一个:

/people/(for $her in group/her, 
             $him in group/him 
         return ($her/text(), $him/text()))

尽管这个表达式被很好地解析了,但它在在线 XPath 测试器上执行时会产生(在我的理解中)一个意想不到的结果。我一直在浏览规范 ,似乎这个表达式不应该是有效的。

现在,我希望能够生成相对于<group>标签的笛卡尔积。我的意思是,我想做生活在同一个群体中的笛卡尔积。如果嵌套 for 表达式是可行的,它应该是这样的:

/people/group/(for $her in her, 
                   $him in him 
               return ($her/text(), $him/text()))

但同样,这并没有产生预期的结果。

说了这么多,我有几个问题:

  1. 在路径中嵌套 for 表达式是否有效?如果是这样,为什么第一个和第二个表达式会产生不同的结果?

  2. 如果 1) 不可能,那么生产相对于<group>标签的笛卡尔积的标准方法是什么?

谢谢!

标签: for-loopxpathcartesian-product

解决方案


推荐阅读