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
我在使用 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