#xquery
#xquery
Вопрос:
Есть ли более простой способ сделать это
<Elements>
{
for $i in ("a", "b", "c")
return <Element name="{$i}"/>
}
</Elements>
в xquery?
Комментарии:
1. Я тоже не понимаю этот вопрос (см. Ответ Оливера ниже). Запрос, который вы нам предоставили, достаточно прост и отлично работает для любой последовательности. Вероятно, вам следует предоставить нам более подробную информацию о вашем реальном варианте использования.
2. @Scheklein Я подумал, что, возможно, такой запрос можно написать без использования FLOWR. Возможно, с помощью какой-то однострочной строки, подобной показанной пользователем 457056.
Ответ №1:
Вы можете использовать fn:map() поддерживает ли ваш процессор XQuery XQuery 3.0:
fn:map(функция($e){ <Имя элемента=»{$e}» /> }, $sequence)
Комментарии:
1. Это интересно. Но, насколько я вижу, XQuery 3.0 находится только на стадии предварительного просмотра.
Ответ №2:
Я не совсем понимаю ваш вопрос. Что вы подразумеваете под «проще»?
Как насчет:
<Elements>
<Element name="a" />
<Element name="b" />
<Element name="c" />
</Elements>
Комментарии:
1. Под «проще» я подразумеваю меньше кода. Я просто использовал abc-последовательность в качестве примера. Последовательность может содержать гораздо больше элементов.
Ответ №3:
Мне также интересно, что вы подразумеваете под «проще».
Имейте все элементы в переменной $seq
и используйте:
for $i in 1 to count($seq)
return <Element name="{$seq[$i]}"/>
Вот целая программа XQuery:
let $seq := 1 to 15
return
for $i in 1 to count($seq)
return <Element name="a{$seq[$i]}"/>
и это выдает правильный, желаемый результат:
<Element name="a1"/>
<Element name="a2"/>
<Element name="a3"/>
<Element name="a4"/>
<Element name="a5"/>
<Element name="a6"/>
<Element name="a7"/>
<Element name="a8"/>
<Element name="a9"/>
<Element name="a10"/>
<Element name="a11"/>
<Element name="a12"/>
<Element name="a13"/>
<Element name="a14"/>
<Element name="a15"/>