Dear all,

I just started learning XQuery.
I have the following XML:

 

<Keywords>

  <Record Keywords="Bus"> 10 20 30 40</Record>

  <Record Keywords="Bus"> 11 21 31 41</Record>

</Keywords>

 

I’m using the following script to multiply by 2 values 30 and 31.  

 

for $v in /Keywords/Record

let $v1 := xs:float($v/tokenize(.,"[|]| ")[3])

return replace value of node $v  with replace ($v, $v/tokenize(.,"[|]| ")[3], xs:string($v1 * 2))

 

The output is correct (please tell me if my script is ok or if there are better ways to accomplish the same task).

 

<Keywords>

  <Record Keywords="Bus">10 20 60 40</Record>

  <Record Keywords="Bus">11 21 62 41</Record>

</Keywords>

 

Now I would like to perform a similar operation but:

case 1) applying the same operation on multiple elements (i.e. element 3 and 4)

case 2) applying the same operation on all element (i.e. 1,2,3,4)

 

For case 2) I tried the following (just removing the index [3])

 

for $v in /Keywords/Record

let $v1 := xs:float($v/tokenize(.,"[|]| "))

return replace value of node $v  with replace ($v, $v/tokenize(.,"[|]| "), xs:string($v1 * 2))

 

But I get the error: Item expected, sequence found: ("10", "20", "...")

I also tried to write a script with two nested for loops, but unsuccessfully.

 

Can you help me?