BaseX возвращает разрывы строк между данными узла

Я использую BaseX в качестве базы данных на основе XML. Я делаю простой запрос, например

xquery for $Book in 
/Libraray/Literaturelist/Literature/Title return fn:data($Book)

Я получаю все заголовки, как и строку без разрывов строк.

Есть ли способ добавить разрывы строк с помощью XQuery после каждого узла, найденного запросом, для разделения данных? На самом деле это не зависит от моего XML-файла, потому что я не добавляю разрывы строк, жестко закодированные в тегах. ;)


person BaseX    schedule 18.06.2010    source источник


Ответы (3)


это зависит от того, как вы получаете результаты запроса. Самый элегантный способ - использовать итератор, например. Показано в:

http://basex.org/code/QueryExample

Кроме того, вы можете расширить свой XQuery, вернув дополнительную новую строку:

xquery for $Book in /Libbraray/Literaturelist/Literature/Title
return (fn:data($Book), '
')

Обратите внимание, однако, что дополнительный вывод пробела не может быть подавлен.

Лучший, Кристиан

PS: не стесняйтесь использовать список рассылки basex-talk, чтобы быстрее получать отзывы.

person Christian    schedule 19.06.2010
comment
Почему появляется дополнительный пробел? - person Sicco; 21.05.2012
comment
Sicco: w3.org/TR/xslt-xquery-serialization-30 -> нормализация последовательности. Тем не менее, вы можете преодолеть это, присоединив последовательность вручную (это работает только для строк и, по сути, означает возврат новой последовательности длины 1): string-join(for $i in 1 to 10 return xs:string($i), "
") - person michael; 21.05.2012

Другой способ добавить новую строку — явно использовать ссылку на символ для новой строки:

xquery for $Book in /Libbraray/Literaturelist/Literature/Title
return (fn:data($Book), "
")
person Sicco    schedule 13.05.2012

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

person Christian Grün    schedule 06.03.2015