我是OracleServiceBus和XQuery的新手。 我的要求如下。
'FieldName'元素可以包含从'udf1'到'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>
任何答案都将是一个很大的帮助。
答案 0 :(得分:1)
用于生成元素的用户计算元素构造函数:
for $i in 1 to 10
let $udf := concat('udf', $i)
return element { $udf } { data(//UserDefinedField[FieldName = $udf]/ValueAsString) }
我认为Oracle支持它们,使用MS SQL这是不可能的,你必须枚举所有这些:
(
element udf1 { data(//UserDefinedField[FieldName = 'udf1']/ValueAsString),
element udf2 { data(//UserDefinedField[FieldName = 'udf1']/ValueAsString),
(: ... :)
element udf10 { data(//UserDefinedField[FieldName = 'udf10']/ValueAsString)
)
答案 1 :(得分:0)
谢谢@Jens Erat。
以下代码为我工作。
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 ()