2016-11-10 1 views
0

У меня есть этот xquery для коллекции книг, в каждой из которых есть по 1 или более fagfelt (тем). Когда я запускаю мой запрос все темы сгруппированы в одной ячейке таблицы (я хочу это), но они не так легко отделяютсяРазделение такого же элемента запятой

let $books := (doc("oblig3.xml")/bøker/bok) 
return 
<html> 
<head> 
</head> 
<body> 
    <table border="1"> 
     <tr>Fagfelt</tr><hr/> 
     <tr><td><b>Bok Title</b></td> 
     <td><b>Forfatter</b></td> 
     <td colspan="3"><b>Fagfelt</b></td> 
    </tr> 
{ 
    for $x in $books 
    order by $x/tittle 
    return <tr> 
     <td>{data($x/tittle)}</td> 
     <td>{data($x/forfatter)}</td> 
     <td>{data($x/fagfelt)}</td> 
    </tr> 
} 
</table> 
</body> 
</html> 

Пример возвращения я получаю это -

<td>Filosofi Kunnskapsrepresentasjon Kunstig Intelligens Programmering</td> 

Это 4 темы в одном, не очень легко читать. Как я могу отделить их и сделать его более похожим

<td>Filosofi, Kunnskapsrepresentasjon, Kunstig Intelligens, Programmering</td> 

Предпочтительно в той же клетке, я попытался просто перечислить их

{data($x/fagfelt[1...4]/text())}, 

И делает разделение вручную, но это только оставляет много запятых в конце книг только с одной темой.

ответ

1

Когда вы сериализуете последовательность в строку в XQuery, определенное поведение должно возвращать список с разделителями. Тем не менее, если вы хотите использовать пользовательский разделитель, используйте fn:string-join():

fn:string-join($x/fagfelt, ', ') 

Из спецификации W3C:

Каждый заключенный выражение преобразуется в строку следующим образом:

а. Атоматизация применяется к значению прилагаемого выражения, преобразуя его в последовательность атомных значений.

b. Если результатом атомизации является пустая последовательность, результатом является строка нулевой длины. В противном случае каждое атомное значение в атомизированной последовательности преобразуется в строку.

c. Отдельные строки, полученные на предыдущем шаге, объединяются в одну строку, объединяя их с одним пробелом между каждой парой.

+0

Большое спасибо, в конечном итоге, используя {строка-Join ((данные ($ х/fagfelt)), "")}, который установил его – Peebl