Я использую BaseX, который реализует XQuery 3.0.
Как украсить источник данных 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>
Но это очень быстро утомляет, когда у меня есть много элементов, которые я должен повторить. Есть ли способ получить этот результат без необходимости вводить все атрибуты и элементы, которые я хочу сохранить в наборе результатов?