2010-06-18 2 views
1

Я использую BaseX как мою базу данных на основе XML. Я делаю простой запрос, напримерBaseX get line-breaks return from node-data

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

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

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

ответ

2

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

http://basex.org/code/QueryExample 

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

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

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

Best, Christian

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

+1

Почему возникает дополнительный символ пространства? – Sicco

+1

Sicco: http://www.w3.org/TR/xslt-xquery-serialization-30/ -> нормализация последовательности. Однако вы можете преодолеть это, объединив последовательность вручную (это работает только для строк и по существу означает возврат новой последовательности длины 1): 'string-join (для $ i в 1 to 10 return xs: string ($ i), " ") ' – michael

0

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

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

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