我正在尝试根据元素响应配置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>
请问你能否验证我在这里遗漏了什么。
答案 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
子句。