if if check根据XQuery中的输入进行检查

时间:2016-10-25 05:57:54

标签: xquery

我正在尝试根据元素响应配置if else检查包含' Y'但出于某种原因,下面的逻辑不起作用。在这里寻求你的帮助。

如果$ Response / Detail / Reefer中的值为&#39; Y&#39;然后只显示<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>

请问你能否验证我在这里遗漏了什么。

1 个答案:

答案 0 :(得分:2)

您对if... then... else...条件表达式的问题可能是它的范围。因为您没有在then子句中的三个项目周围放置括号,所以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子句。