Переменная Xquery concat, основанная на условии - PullRequest
0 голосов
/ 05 октября 2018

Я пытаюсь согласовать значение элемента на основе определенного условия, но не могу этого сделать.Что здесь не так?

Для приведенной ниже структуры примера мне нужно согласовать значение CID на основе кода OutcomeCode.Скажем, если у нас есть OutcomeCode в качестве OC и ПК, то мы должны отобразить объединенное значение 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 - 002,003 , поскольку эти 2 соответствуют условию OC и ПК.

1 Ответ

0 голосов
/ 06 октября 2018

Вы можете упростить это для цикла и объединить критерии в один XPath, чтобы выбрать CId из Details, которые имеют OutcomeCode «OC» или «PC».

Затем используйтеstring-join() для получения значения, разделенного запятыми.

Затем используйте concat(), чтобы получить строку с префиксом и значением CSV:

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