基于条件的Xquery变量concat

基于条件的Xquery变量concat,xquery,Xquery,我试图根据特定条件计算元素的值,但无法这样做。这里怎么了 对于下面给定的示例结构,我需要根据结果代码计算CID的值。假设我们的结果代码是OC和PC,那么我们应该在字符串变量中显示连接的CId值 <v4:ValidateResponse xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:v4="http://service.com/v4"> <v4:Details> <v

我试图根据特定条件计算元素的值,但无法这样做。这里怎么了

对于下面给定的示例结构,我需要根据结果代码计算CID的值。假设我们的结果代码是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>
我无法获取concat值

预期结果如下:CID为-002003
因为这2个符合OC和PC条件

您可以简化for循环,并将这些条件组合到一个XPath中,以从
Details
中选择
CId
,其中
OutcomeCode
为“OC”或“PC”

然后,使用
string-join()
生成逗号分隔的值

然后,使用
concat()
生成带有前缀和CSV值的字符串:

concat('CID is- ',
 string-join(
   $ValidateResponse/*:Details[*:OutcomeCode =('OC','PC')]/*:Detail/*:CId, 
   ",") 
)

请将预期结果附在您的问题上。@ChristianGrün-更新为预期结果。.您的查询中有几个令人困惑的地方:1。XQuery中没有“联系人”功能;2.您的预期结果不包括“技术检查”,尽管您的输入中存在FC条件,3。您的查询以“as xs:string{”开头。这是故意的吗?请花更多时间创建您的问题,谢谢。
concat('CID is- ',
 string-join(
   $ValidateResponse/*:Details[*:OutcomeCode =('OC','PC')]/*:Detail/*:CId, 
   ",") 
)