我已经看到可以进行cartesian product in XPath 使用 For Expression 。例如,给定以下输入:
<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>
我可以使用以下方法将每个 her 与每个 him 配对:
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()))
尽管可以很好地解析该表达式,但是(在我的理解中)在online XPath tester上执行时会产生意外结果。我去过 略过specification 似乎该表达式无效。
现在,我希望能够产生相对于<group>
标签的笛卡尔乘积。我的意思是,我想在同一个人中的她和 him 之间进行笛卡尔乘积运算。如果为表达式嵌套是可行的,则应该是这样的:
/people/group/(for $her in her,
$him in him
return ($her/text(), $him/text()))
但是,这仍然没有产生预期的结果。
话虽如此,我有几个问题:
在路径中嵌套for表达式是否有效?如果是这样,为什么第一和第二个表达式产生不同的结果?
如果不可能执行1),则产生笛卡尔坐标的标准方法是什么?
相对于<group>
标签的产品?
谢谢!