2016-10-25 7 views
-2

「Y」を含む要素応答に基づいてif elseチェックを構成しようとしましたが、何らかの理由で以下のロジックが機能しません。ここであなたの助けを探しています。XQueryの入力に基づいてチェックする場合

$ Response/Detail/Reeferの値が 'Y'の場合は、<LiveReefer>以外のタグを表示します。

<ns0:CargoTypeCd> 
    let $_Reefer := data($Response/Detail/Reefer) 
if ($_Reefer = 'Y') then 
     <LiveReefer>{data($Response/Detail/Reefer)}</LiveReefer> 
    else 
     <Dry>{data($Response/Detail/Dry)}</Dry> 
     <Dangerous>{data($Response/Detail/Dangerous)}</Dangerous> 
      <OutOfGauge>{data($Response/Detail/OOG)}</OutOfGauge> 
</ns0:CargoTypeCd> 

ここに何か不足している場合は、ご確認ください。

+2

説明 '動作していません' ..予想される出力は何ですか?代わりに何を得ましたか? – har07

+0

@ har07 - 期待通りの結果が得られました。理想的には、Id条件の結果が一致した場合、LIVEReeferタグのみがDry、Dangerous、OutOfGaugeに表示されません。しかし、ここで私はすべて4を得ています。 – kumarb

+1

あなたは本当にこのコードから結果を得ていますか?それには多くの構文エラーがあります。私は、FLWORブロックを囲む中括弧がなく、 'return'節はありません。あなたがここに投稿したものとは異なるコードで作業しているなら、手伝いが難しいです。 – joewiz

答えて

2

if... then... else...の条件式で問題が発生している可能性があります。 then句の3つの項目の前後に括弧を入れなかったため、XQueryプロセッサは最初の項目の後にあるものを条件式の外として扱います。これを修正するには、コードをカッコで囲むように変更します。

<ns0:CargoTypeCd xmlns:ns0="foo"> 
    { 
     let $_Reefer := data($Response/Detail/Reefer) 
     return 
      if ($_Reefer = 'Y') then 
       <LiveReefer>{data($Response/Detail/Reefer)}</LiveReefer> 
      else 
       (
        <Dry>{data($Response/Detail/Dry)}</Dry>, 
        <Dangerous>{data($Response/Detail/Dangerous)}</Dangerous>, 
        <OutOfGauge>{data($Response/Detail/OOG)}</OutOfGauge> 
       ) 
    } 
</ns0:CargoTypeCd> 

このコードはまた、あなたの元のコードでいくつかの構文エラーに対処しますFLWORコードブロックの周りの中括弧の不足や、あなたのFLWOR式のreturn句の欠如。

+0

あなたの助けをありがとう..それは私のために働きます。 – kumarb

+0

素晴らしい!その場合、クマール、答えとしてマークしてください。 – joewiz

関連する問題