Поместите каждый результат XQuery на новую строку

Можно ли поместить каждый результат XQuery в новую строку? Я думал, что вспомнил, что в начале документа есть атрибут, но не помню.:/

У меня есть этот .xq файл:

(: declare default element namespace "http://www.w3.org/2001/XMLSchema"; :)
for $x at $i in doc("zoo.xml")//animal
return <li>{$i}. {$x/name/text()}</li> 

Я получаю правильные результаты, но все они находятся на одной строке, когда я действительно хочу что-то вроде:

<li>1. Zeus</li>
<li>2. Fred</li>
...

Возможно ли это? Заранее благодарю за ваши ответы!:)

Ответ 1

... вы можете добавить строку новой строки в качестве второй части предложения return:

(: declare default element namespace "http://www.w3.org/2001/XMLSchema"; :)
for $x at $i in doc("zoo.xml")//animal
return (<li>{$i}. {$x/name/text()}</li>, '&#xa;')

Способ сериализации результатов также зависит от конкретного процессора XQuery.

Ответ 2

XQuery 3.0 предоставляет новую возможность сериализации item-separator, которая может быть указана в прологе запроса:

declare namespace output = "http://www.w3.org/2010/xslt-xquery-serialization";
declare option output:item-separator "&#xa;";

for $x at $i in doc("zoo.xml")//animal
return <li>{$i}. {$x/name/text()}</li> 

Ответ 3

Используемый вами движок XQuery может иметь возможность отступать от вывода. Например. в Zorba опция отступа работает следующим образом:

zorba -i -q 'for $x in 1 to 10 return <a/>'
<?xml version="1.0" encoding="UTF-8"?>
<a/>
<a/>
<a/>
<a/>
<a/>
<a/>
<a/>
<a/>
<a/>
<a/>

Ответ 4

спецификация XQuery 3.1 Serialization предоставляет новый "адаптивный" режим сериализации, который выводит каждый результат XQuery на новую строку.

Некоторые процессоры XQuery используют этот режим как новый по умолчанию.