Я использую BaseX, который реализует XQuery 3.0.Embellish XML datasource в XQuery
Как мне украсить XML-источник данных в XQuery, не вводя все элементы, которые я хочу включить? Например, рассмотрим следующий XML:
<X>
<name>The root</name>
<Y>
<name> Level 1</name>
<Z>
<name>Level 2a</name>
<value>1</value>
</Z>
</Y>
<Y>
<name>Level 1b</name>
<Z>
<name>Level 2b</name>
<value>2</value>
</Z>
</Y>
</X>
Я хочу, чтобы добавить сумму всех значений на каждом уровне, как это:
<X>
<name>The root</name>
<value>3</value>
<Y>
<name> Level 1</name>
<value>1</value>
<Z>
<name>Level 2a</name>
<value>1</value>
</Z>
</Y>
<Y>
<name>Level 1b</name>
<value>2</value>
<Z>
<name>Level 2b</name>
<value>2</value>
</Z>
</Y>
</X>
Я могу использовать XQuery, как это для этого:
for $x in /X
return
<X>{
$x/name,
<value>{sum($x//value)}</value>,
for $y in $x/Y
return
<Y>{
$y/name,
<value>{sum($y//value)}</value>,
$y/Z
}</Y>
}</X>
Но это очень утомительно, когда у меня есть много элементов, которые я должен повторить. Есть ли способ получить этот результат, не вводя все атрибуты и элементы, которые я хочу сохранить в наборе результатов?
Awesome, я начинаю любить эту XQUERY вещь :) – wvdz
ли вы имеете в виду с добавлением их рекурсивно, что я могу писать ' {сумму ($ что-то // значение)} ' раз и использовать его рекурсивно? Не могли бы вы добавить пример того, как это сделать для данных примера, если это то, что вы имели в виду? Для моей ситуации я должен добавить агрегаты для примерно 15 значений для нескольких уровней, поэтому было бы здорово, если бы я мог сделать это таким образом, что мне нужно только один раз написать совокупный код. –
wvdz