Я нахожусь в середине создания xquery replace-value действия узла в XQuery
.XQuery Заменить значение с условным сбоем
Но кажется, что этот код не работает, поэтому заявление IF-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, но результат всегда не XXX
, когда поле revision
является имеющим значение. (Это всегда идет на 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>
Любые идеи для этого?
Update
В соответствии с рекомендациями 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(). Любые идеи?
Благодарим вас раньше.
спасибо за ваше обновление. Но похоже, что эта логика IF-Else все еще дает мне тот же результат. Остается только возврат. Я внес изменения в первую «замену значения узла», удалив else(), поскольку он дает мне ошибку в baseX. Любые идеи? Я уточню вопрос. – randytan
Можете ли вы опубликовать образец XML, который должен перейти в блок 'if'? Ваш текущий XML правильно перейдет в 'else', так как он имеет пустой' transactionType', а 'if' оценивается как' true', когда 'transactionType' не пуст, не так ли? – har07
Привет, спасибо за ваши комментарии. Кажется, логика, которую мне нужно обновить, не одна за другой. Он должен быть параллельным. Таким образом, в моем ожидаемом результате это: 'если значение равно none ', а затем показать как' none'. Else 'если есть значение' просто показать '' XXX''. Возможно ли одновременно обновлять два поля? – randytan