【问题标题】:How can I create xquery using xml response如何使用 xml 响应创建 xquery
【发布时间】:2016-01-19 01:38:34
【问题描述】:

下面提到的是实际的xquery。

declare variable $rankCode_DL3UJ :=("CPT","FO","FM");
declare variable $rankCode_DL4UJ :=("CRFO","CL");
declare variable $type :=("DOM","ISH");

declare function local:getboardingPriorityCode($flightType as element(), $rankCode as element()) as xs:string
{
if(data($flightType) = $type) then
    'DHD'
else
    if(data($rankCode) = $rankCode_DL3UJ) then
        'DL3UJ'
    else if(data($rankCode) = $rankCode_DL4UJ) then
        'DL4UJ'
    else
        'DL5UJ'
};

declare function local:getPreferredClass($flightType as    element(flightCategory:Code)) as xs:string
{

if(data($flightType) = $type) then
    'Y'
else
    'J'

};

declare function xf:createDeadheadReservationRQ-to-     PassengerDetailsRQ($createDeadheadReservationRQ1 as   element(ns1:CreateDeadheadReservationRQ),$CreateDeadHeadReservationAdapterSelect   RS as element(ns3:RefTickettypeCollection),
$airBookRS as element(flightCategory:GetFlightCategoryRS))
as element(ns2:PassengerDetailsRQ) {
    <ns2:PassengerDetailsRQ Version = "2.0.0">
        <ns2:SpecialReqDetails>
            <ns2:AddRemarkRQ>
                <ns2:RemarkInfo>
                    <ns2:Remark Type = "General">
                        <ns2:Text>{  data($createDeadheadReservationRQ1/ns1:SpecialRequestDetails/ns1:Remark) }</ns2:Text>
                    </ns2:Remark>
                </ns2:RemarkInfo>
            </ns2:AddRemarkRQ>
            <ns2:SpecialServiceRQ>
                <ns2:SpecialServiceInfo>
                    <ns2:SecureFlight SegmentNumber = "A" SSR_Code = "DOCS">
                        <ns2:PersonName DateOfBirth = "{   data($createDeadheadReservationRQ1/ns1:PassengerInfo/ns1:DateOfBirth) }"
                                        Gender = "{   data($createDeadheadReservationRQ1/ns1:PassengerInfo/ns1:Gender) }"
                                        NameNumber = "1.1">
                            <ns2:GivenName>{     data($createDeadheadReservationRQ1/ns1:PassengerInfo/ns1:PassengerName/ns1:GivenName) }</ns2:GivenName>
                            <ns2:Surname>{ data($createDeadheadReservationRQ1/ns1:PassengerInfo/ns1:PassengerName/ns1:Surname) }</ns2:Surname>
                        </ns2:PersonName>
                        <ns2:VendorPrefs>
                            <ns2:Airline Hosted = "true"/>
                        </ns2:VendorPrefs>
                    </ns2:SecureFlight>
                    <ns2:Service SSR_Code = "{ data($createDeadheadReservationRQ1/ns1:SpecialRequestDetails/ns1:RankBasedSSR) }">
                        <ns2:VendorPrefs>
                            <ns2:Airline Hosted = "true"/>
                        </ns2:VendorPrefs>
                    </ns2:Service>
                </ns2:SpecialServiceInfo>
            </ns2:SpecialServiceRQ>
        </ns2:SpecialReqDetails>
        <ns2:TravelItineraryAddInfoRQ>
            <ns2:AgencyInfo>
                <ns2:Ticketing TicketType = "{fn:concat('7PS-',  local:getboardingPriorityCode($airBookRS/flightCategory:ServiceType/flightCategory:Code, $createDeadheadReservationRQ1/ns1:PassengerInfo/ns1:RankCode), local:getPreferredClass($airBookRS/flightCategory:ServiceType/flightCategory:Code))}"/>
            </ns2:AgencyInfo>
            <ns2:CustomerInfo>
                <ns2:PersonName>
                    <ns2:GivenName>{
                             xs:string(fn:concat($createDeadheadReservationRQ1/ns1:PassengerInfo/ns1:PassengerName/ns1:GivenName,' ',
                             $createDeadheadReservationRQ1/ns1:PassengerInfo/ns1:PassengerName/ns1:Title))
                    }</ns2:GivenName>
                    <ns2:Surname>{ xs:string($createDeadheadReservationRQ1/ns1:PassengerInfo/ns1:PassengerName/ns1:Surname) }</ns2:Surname>
                </ns2:PersonName>
            </ns2:CustomerInfo>
        </ns2:TravelItineraryAddInfoRQ>
    </ns2:PassengerDetailsRQ>
};

  declare variable $createDeadheadReservationRQ1 as           element(ns1:CreateDeadheadReservationRQ) external;
  declare variable $airBookRS as element(flightCategory:GetFlightCategoryRS)  external;
  declare variable $CreateDeadHeadReservationAdapterSelectRS as   element(ns3:RefTickettypeCollection) external;

   xf:createDeadheadReservationRQ-to-  PassengerDetailsRQ($createDeadheadReservationRQ1, $airBookRS,     $CreateDeadHeadReservationAdapterSelectRS)

所以我们必须进行以下更改。

为此,我们在 DB 中创建了下表,使用 JCA 适配器,我们收到了响应,并在 OSB 中创建了 JCA 适配器的 xml 响应创建业务服务。

条件:在查询中,我们需要始终获取 OTHER,因此查询将如下所示,如果我们得到 2 个结果,则选择一个不是“其他”的结果,例如选择 CPT,如果它在选择查询的结果中返回并且我们得到 1结果则始终为“其他”。

Select *from <Table> where Code_name in (‘OTHER’, 'value received in request');

业务服务JCA适配器的xml请求和响应:

Request:
<cre:CreateDeadHeadReservationAdapterSelect_CODE_NAMEInputParameters>
 <cre:CODE_NAME>CPT</cre:CODE_NAME>
 </cre:CreateDeadHeadReservationAdapterSelect_CODE_NAMEInputParameters>

回复:

 <cre:RefTickettypeCollection xmlns:xsi="http://www.w3.org/2001/XMLSchema-     instance" xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:cre="http://xmlns.oracle.com/pcbpel/adapter/db/top/CreateDeadHeadReservati  onAdapter">
<cre:RefTickettype>
<cre:codeName>CPT</cre:codeName>
<cre:codeType>Rank</cre:codeType>
<cre:priorityCode>DL3UJ</cre:priorityCode>
<cre:preferredClass>J</cre:preferredClass>
</cre:RefTickettype>
<cre:RefTickettype>
<cre:codeName>OTHER</cre:codeName>
<cre:codeType>Other</cre:codeType>
<cre:priorityCode>DL7UJ</cre:priorityCode>
<cre:preferredClass>J</cre:preferredClass>
</cre:RefTickettype></cre:RefTickettypeCollection>



So using the above response could you pls help me to create the xquery logic.

【问题讨论】:

    标签: xquery osb


    【解决方案1】:

    我不确定我是否理解您的所有问题。但是,听起来当返回两个RefTickettype 元素时,您想选择codeName 不是OTHER 的那个?

    以下查询检查结果中有多少 RefTickettype 元素。如果只有一个,则返回。如果有多个,它将​​返回所有codeName 不是OTHER 的地方。

    declare namespace cre="http://xmlns.oracle.com/pcbpel/adapter/db/top/CreateDeadHeadReservationAdapter";
    
    let $response := 
    
      <cre:RefTickettypeCollection>
        <cre:RefTickettype>
          <cre:codeName>CPT</cre:codeName>
          <cre:codeType>Rank</cre:codeType>
          <cre:priorityCode>DL3UJ</cre:priorityCode>
          <cre:preferredClass>J</cre:preferredClass>
        </cre:RefTickettype>
        <cre:RefTickettype>
          <cre:codeName>OTHER</cre:codeName>
          <cre:codeType>Other</cre:codeType>
          <cre:priorityCode>DL7UJ</cre:priorityCode>
          <cre:preferredClass>J</cre:preferredClass>
        </cre:RefTickettype>
      </cre:RefTickettypeCollection>
    
    return
    
      if (count($response/cre:RefTickettype) eq 1) then
        $response/cre:RefTickettype
      else 
        $response/cre:RefTickettype[cre:codeName ne "OTHER"]
    

    【讨论】:

    • 如何将相同的逻辑写入实际的 xquery,请帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-27
    相关资源
    最近更新 更多