我试图根据某些条件来合并元素的值,但无法这样做。怎么了?
对于以下给定的示例结构,我需要根据OutcomeCode代码来确定CID的值。假设如果将OutcomeCode设为OC和PC,则应在字符串变量中显示CId的串联值。
<v4:ValidateResponse xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:v4="http://service.com/v4">
<v4:Details>
<v4:Detail>
<v4:CId>001</v4:CId>
</v4:Detail>
<v4:OutcomeCode>FC</v4:OutcomeCode>
</v4:Details>
<v4:Details>
<v4:Detail>
<v4:CId>002</v4:CId>
</v4:Detail>
<v4:OutcomeCode>PC</v4:OutcomeCode>
</v4:Details>
<v4:Details>
<v4:Detail>
<v4:CId>003</v4:CId>
</v4:Detail>
<v4:OutcomeCode>OC</v4:OutcomeCode>
</v4:Details>
</v4:ValidateResponse>
这是我的转变
as xs:string
{
for $Details in $ValidateResponse /*:Details
let $OutcomeCode := data($Details/*:OutcomeCode)
return
if (($OutcomeCode ='OC') or ($OutcomeCode='PC'))
then
contact('CID is-',data($Details/*:Detail/*:CId))
else
fn:data('Technical_Check')
};
我无法获得concat值。
预期结果应为: CID为-002003 因为这两个符合OC和PC条件。
答案 0 :(得分:1)
您可以简化此for循环,并将条件组合到单个XPath中,以从CId
中选择Details
为“ OC”或“ PC”的OutcomeCode
。
然后,使用string-join()
来产生一个逗号分隔的值。
然后,使用concat()
生成带有前缀和CSV值的字符串:
concat('CID is- ',
string-join(
$ValidateResponse/*:Details[*:OutcomeCode =('OC','PC')]/*:Detail/*:CId,
",")
)