XQuery用条件失败替换值



我正在XQuery中创建节点操作的xquery替换值。

但是这个代码似乎不起作用,因此IF-ELSE语句总是转到else。

这是我的代码:

declare function local:replacing($contextData as element()) 
as element()*
{    
copy $pipeline := $contextData/Handler/Data/*
modify(
if(not(empty(data($pipeline/Payload/sample/transactionType)))) then 
replace value of node $pipeline/Payload/sample/transactionType with 'XXX' else (),
if(not(empty(data($pipeline/Payload/sample/revision)))) then
replace value of node $pipeline/Payload/sample/revision with 'XXX' else ()
)
return $pipeline
};

我尝试使用这个示例XML,但当字段revision有值时,结果总是不是XXX。(这总是转到else语句)

let $result :=
<root>
<Handler>
<Data>
<root>
<Payload>
<sample>
<transactionType></transactionType>
<revision>123</revision>
<board>1</board>
<mission>1</mission>
<method>Manual</method>
<listOfBoard>
<board>
<type>small</type>
<amount>5054</amount>
<token>300</token>
</board>
</listOfBoard>
<pricing>300</pricing>
<playing>Wed</playing>
</sample>   
</Payload>
</root>
</Data>
</Handler>
</root>

当前结果:

<root>
<Payload>
<sample>
<transactionType/>
<revision>123</revision>
<board>1</board>
<mission>1</mission>
<method>Manual</method>
<listOfBoard>
<board>
<type>small</type>
<amount>5054</amount>
<token>300</token>
</board>
</listOfBoard>
<pricing>300</pricing>
<playing>Wed</playing>
</sample>
</Payload>
</root>

预期结果

<root>
<Payload>
<sample>
<transactionType/>
<revision>XXX</revision>
<board>1</board>
<mission>1</mission>
<method>Manual</method>
<listOfBoard>
<board>
<type>small</type>
<amount>5054</amount>
<token>300</token>
</board>
</listOfBoard>
<pricing>300</pricing>
<playing>Wed</playing>
</sample>
</Payload>
</root>

对此有什么想法吗?

更新

根据Har下面的建议,我将代码更改为:

if(not(empty(data($pipeline/Payload/sample/transactionType)))) then 
replace value of node $pipeline/Payload/sample/transactionType with 'XXX'
else (
if(not(empty(data($pipeline/Payload/sample/revision)))) then
replace value of node $pipeline/Payload/sample/revision with 'XXX' else ()
)

但结果似乎是一样的。它仍然转到else()语句。有什么想法吗?

谢谢你。

问题是,empty()检查空序列,因此包含一个空字符串的序列被empty()视为true。您可以将data()结果传递给if,因为空具有false:的有效布尔值

if(data($pipeline/Payload/sample/transactionType)) then 
replace value of node $pipeline/Payload/sample/transactionType with 'XXX' else (),
if(data($pipeline/Payload/sample/revision)) then
replace value of node $pipeline/Payload/sample/revision with 'XXX' else ()

相关内容

  • 没有找到相关文章

最新更新