基于条件的Xquery变量concat

时间:2018-10-05 12:53:12

标签: xquery

我试图根据某些条件来合并元素的值,但无法这样做。怎么了?

对于以下给定的示例结构,我需要根据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条件。

1 个答案:

答案 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, 
   ",") 
)