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

if-else根据XQuery中的输入进行检查,xquery,Xquery,我正在尝试配置基于元素响应的if-else检查是否包含“Y”,但由于某些原因,下面的逻辑不起作用。在这里寻找你的帮助 如果$Response/Detail/REFER中的值为“Y”,则仅显示,否则显示其他标记 <ns0:CargoTypeCd> let $_Reefer := data($Response/Detail/Reefer) if ($_Reefer = 'Y') then <LiveReefer>{data($Response/Detail/R

我正在尝试配置基于元素响应的if-else检查是否包含“Y”,但由于某些原因,下面的逻辑不起作用。在这里寻找你的帮助

如果$Response/Detail/REFER中的值为“Y”,则仅显示
,否则显示其他标记

<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>

let$_Reefer:=数据($Response/Detail/Reefer)
如果($_Reefer='Y'),则
{数据($Response/Detail/Reefer)}
其他的
{数据($Response/Detail/Dry)}
{数据($Response/Detail/danger)}
{data($Response/Detail/OOG)}

请验证我是否遗漏了任何内容。

如果。。。然后。。。否则…条件表达式可能就是它的作用域。因为您没有在
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>

{
let$_Reefer:=数据($Response/Detail/Reefer)
返回
如果($_Reefer='Y'),则
{数据($Response/Detail/Reefer)}
其他的
(
{数据($Response/Detail/Dry)},
{数据($Response/Detail/danger)},
{data($Response/Detail/OOG)}
)
}

此代码还解决了原始代码中的几个语法错误:FLWOR代码块周围缺少大括号,FLWOR表达式中缺少
return
子句。

解释“不工作”。。预期的输出是什么?您得到了什么?@har07-我得到了预期的结果。理想情况下,若结果符合Id条件,则我们应仅显示LIveReefer标签,不干燥、危险且未显示。但是这里我得到了全部4个。你真的从这个代码中得到了结果吗?它有许多语法错误,我希望这会阻止它工作:FLWOR块周围没有大括号,没有
return
子句。如果您使用的代码与您在此处发布的代码不同,那么很难提供帮助…太好了!如果是这样的话,库马尔,请把这个标记为答案。