XQuery 生成连接但添加额外的空白字符

XQuery Generate Concatenate But Adding Extra Whitespace Character

我在使用 XQuery 生成字符串组时遇到问题。每个连接都在添加一个额外的白色 space。

比如我的XML文件是这样的

<createRequest>
    <transactionType>GAME1</transactionType>
    <listOfBoard>
        <board>
            <gameType>RegularA</gameType>
            <listOfBoardData>
                <boardData>6</boardData>
                <boardData>12</boardData>
            </listOfBoardData>
        </board>
        <board>
            <gameType>RegularB</gameType>
            <listOfBoardData>
                <boardData>7</boardData>
                <boardData>8</boardData>
                <boardData>11</boardData>
                <boardData>21</boardData>
                <boardData>28</boardData>
                <boardData>47</boardData>
            </listOfBoardData>
        </board>
    </listOfBoard>
    <ticketPrice>600</ticketPrice>
</createRequest>

我的代码

let $requestMessage := //createRequest

let $boardData := 
for $eachOfListBoardData in 1 to count($requestMessage/listOfBoard/board/listOfBoardData)
return
   fn:concat(fn:string-join($requestMessage/listOfBoard/board[$eachOfListBoardData]/listOfBoardData/boardData, ","),":")


return $boardData

但结果是在每个组之后输出额外的白色space,如下所示

6,12: 7,8,11,21,28,47: 4,11,21,26,28,31: 7,28,31,45,46,49: 15,29,34,36,41,42: 5,7,14,21,42,46:

它在数字“46”后添加“:”

我想要的输出是6,12:7,8,11,21,28,47:4,11,21,26,28,31:7,28,31,45,46,49:15,29,34,36,41,42:5,7,14,21,42,46

有什么想法吗?

"...but the result is outputing extra whitespace after each of group..."

string-join() 传递空字符串作为第二个参数可以帮助您解决这个问题。

"and it is adding ':' after the number '46'"

您可以使用 if-else 结构追加 : 仅当当前项目不是最后一个项目时,请参阅下面的完整 XQuery 示例:

let $requestMessage := //createRequest
let $lastBoard := ($requestMessage/listOfBoard/board/listOfBoardData)[last()]

let $boards := 
for $board in $requestMessage/listOfBoard/board/listOfBoardData
return
    if($board is $lastBoard)
        then fn:string-join($board/boardData, ",")
    else fn:concat(fn:string-join($board/boardData, ","),":")

let $boardData := fn:string-join($boards, "")

return $boardData