所以我有这样的xml数据:
<PhoneNumber>213-512-7457</PhoneNumber>
<PhoneNumber>213-512-7465</PhoneNumber>
并使用此XQuery:
<PhoneNumberList>
{
for $phone in $c//PhoneNumber
let $phoneStr := ""
return concat($phoneStr, $phone)
}
</PhoneNumberList>
我明白了:
<PhoneNumberList>213-512-7457213-512-7465</PhoneNumberList>
但我真的想要:
<PhoneNumberList>213-512-7457, 213-512-7465</PhoneNumberList>
有人可以说明如何做到这一点吗?
答案 0 :(得分:12)
<PhoneNumberList>
{
string-join($c//PhoneNumber, ", ")
}
</PhoneNumberList>
答案 1 :(得分:1)
XQuery中的变量似乎有很多混淆。每次计算时,let表达式都会创建一个新变量,因此下面的“程序”方法将无效。
虽然字符串连接解决方案在您的情况下是最好的,但是“手动”编写此方法的正确方法是使用递归函数:
declare function local:join-numbers($numbers)
{
concat($numbers[1], ", ", local:join-numbers(substring($numbers,2)))
};
<PhoneNumberList>
{
local:joinNumbers($c//PhoneNumber)
}
</PhoneNumberList>
答案 2 :(得分:0)
好的,像这样的东西应该按原样返回第一个元素,其余部分带有前置的“,”
<PhoneNumberList>
{
for $phone in $c//PhoneNumber[0]
return $phone
for $phone in $c//PhoneNumber[position()>0]
return concat(", ", $phone)
}
</PhoneNumberList>
答案 3 :(得分:-1)
这个怎么样?
let $phoneStr := ""
<PhoneNumberList>
{
for $phone in $c//PhoneNumber
let $result = concat($phoneStr, $phone)
let $phoneStr = ", "
return $result
}
</PhoneNumberList>