2017-12-20 35 views
0

OSBプロジェクトでXqueryマッピングを使用しています。以下は、私がXquery --- FORG0001: "":キャスト/コンストラクターエラーの無効な値

let $unitofmeasure := 
    if (data($ItemMaster/ns1:Item/ns1:dcunitofmeasure)= 1) then 
    'CS' 
    else if (data($ItemMaster/ns1:Item/ns1:dcunitofmeasure) = 2 or 
      data($ItemMaster/ns1:Item/ns1:dcunitofmeasure) = 3) then 
    'EA' 
    else if (data($ItemMaster/ns1:Item/ns1:corpwarehouseunitofmeasure) = 2 or 
      data($ItemMaster/ns1:Item/ns1:corpwarehouseunitofmeasure) = 3) then 
    'EA' 
    else 
    'CS' 

その後、私はこのその投げエラーを実行すると、ターゲットノードBaseStorageUOM(String)を

{ 
    if ($unitofmeasure != '') then 
    (
     <BaseStorageUOM>{xs:string($unitofmeasure)}</BaseStorageUOM> 
    ) 
    else 
    (
     <BaseStorageUOM>CS</BaseStorageUOM> 
    ) 
} 

にマップするために定義された変数の上に使用していますエラーがスローされている使用していたサンプルコードですXQuery変換を実行します。

{ http://www.w3.org/2005/xqt-errors }FORG0001: "": invalid value for cast/constructor: { http://www.w3.org/2001/XMLSchema }double: error: double: Invalid double value:

コードで問題を把握できませんでした。

答えて

0

この簡略化されたバージョンはSaxonを使用して正常に動作しますので、XQueryはOKです。例ではreturnのどこかに記載されていない限り、問題ありません。

let $data := <root> 
       <dcunitofmeasure>2</dcunitofmeasure> 
       </root> 

let $unitofmeasure := if ($data//dcunitofmeasure = 1) 
         then 'CS' 
          else if ($data//dcunitofmeasure = 2 or $data//dcunitofmeasure = 3) 
          then 'EA' 
         else 'CS' 

return 
    if ($unitofmeasure != '') 
    then (<BaseStorageUOM>{xs:string($unitofmeasure)}</BaseStorageUOM>) 
    else (<BaseStorageUOM>CS</BaseStorageUOM>) 
+0

dcunitofmeasureは10進数のデータ型ですので、問題が発生しました。この問題は、if条件で1と比較しようとしたときに失敗しました。 – vikash

関連する問題