Я видел, что можно сделать декартово произведение в 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>
тег.Я имею в виду, что я хотел бы сделать декартово произведение между ее s и ему s, живущими в той же группе.Если вложенные выражения были жизнеспособными, это должно выглядеть примерно так:
/people/group/(for $her in her,
$him in him
return ($her/text(), $him/text()))
Но опять же, это не дает ожидаемого результата.
Сказав это, у меня есть несколько вопросов:
Допустимо ли вкладывать выражение в путь?Если да, то почему первое и второе выражения дают разные результаты?
Если 1) невозможно, каков стандартный способ получения декартового произведения относительно <group>
тег?
Спасибо!