So I have xml data like this:
<PhoneNumber>213-512-7457</PhoneNumber>
<PhoneNumber>213-512-7465</PhoneNumber>
and with this XQuery:
<PhoneNumberList>
{
for $phone in $c//PhoneNumber
let $phoneStr := ""
return concat($phoneStr, $phone)
}
</PhoneNumberList>
I get:
<PhoneNumberList>213-512-7457213-512-7465</PhoneNumberList>
But I actually want:
<PhoneNumberList>213-512-7457, 213-512-7465</PhoneNumberList>
Could someone shed some light on how to do this?
<PhoneNumberList>
{
string-join($c//PhoneNumber, ", ")
}
</PhoneNumberList>
There seems to be a lot of confusion with variables in XQuery. A let expression creates a new variable each time it is evaluated, so the "procedural" approaches below will not work.
Whilst the string-join solution is the best in your case, the correct way to write this "manually" is with a recursive function:
declare function local:join-numbers($numbers)
{
concat($numbers[1], ", ", local:join-numbers(substring($numbers,2)))
};
<PhoneNumberList>
{
local:joinNumbers($c//PhoneNumber)
}
</PhoneNumberList>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With