Question

I am new to OracleServiceBus and XQuery. My requirement is as follows.

'FieldName' element can have values from 'udf1' till 'udf10'

Input XML
<UserDefinedFields>
   <UserDefinedField>
      <FieldName>udf5</FieldName>
      <ValueAsString>UDF5Value</ValueAsString>
    </UserDefinedField>
   <UserDefinedField>
      <FieldName>udf8</FieldName>
      <ValueAsString>UDF8Value</ValueAsString>
    </UserDefinedField>
   <UserDefinedField>
      <FieldName>udf3</FieldName>
      <ValueAsString>UDF3Value</ValueAsString>
    </UserDefinedField>
</UserDefinedFields>

Expected XML

        <udf1></udf1>
        <udf2></udf2>
        <udf3>UDF3Value</udf3>
        <udf4></udf4>
        <udf5>UDF5Value</udf5>
        <udf6></udf6>
        <udf7></udf7>
        <udf8>UDF8Value</udf8>
        <udf9></udf9>
        <udf10></udf10>

Any answer will be a great help.

Was it helpful?

Solution 2

Thanks @Jens Erat.

Following code worked for me.

   for $UserDefinedField in $UserDefinedFields/UserDefinedField
   for $i in 1 to 20
   let $udf := concat('udf', $i)
   return if ($UserDefinedField/FieldName = $udf ) then
   element {$udf}{data($UserDefinedField/ValueAsString)}
   else ()

OTHER TIPS

User computed element constuctors for generating the elements:

for $i in 1 to 10
let $udf := concat('udf', $i)
return element { $udf } { data(//UserDefinedField[FieldName = $udf]/ValueAsString) }

I think Oracle supports them, with MS SQL this would not be possible and you'd have to enumerate all of them:

(
  element udf1 { data(//UserDefinedField[FieldName = 'udf1']/ValueAsString),
  element udf2 { data(//UserDefinedField[FieldName = 'udf1']/ValueAsString),
  (: ... :)
  element udf10 { data(//UserDefinedField[FieldName = 'udf10']/ValueAsString)
)
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top