Использование тернарного оператора в Spring-Integration xpath-expression
Я использую Spring Integration и у меня есть следующие два вида ввода XML
Первый XML:
<businessArea>SomeValue</businessArea>
Второй XML:
<?xml version="1.0" encoding="UTF-8"?>
<businessArea>
<Code>SomeValue</Code>
</businessArea>
Теперь я хочу сохранить значение Business Area в заголовке на основе следующих условий:
1) Если у business Area нет дочерних узлов, таких как <Code>
во втором XML, затем значение узла businessArea
должен храниться в шапке.
2) Если businessArea
имеет какой-либо дочерний узел, такой как <Code>
во втором xml, тогда нулевое значение должно быть сохранено в заголовке.
В настоящее время я использую следующее выражение:
<int-xml:header name="businessArea" xpath-expression="//businessArea" evaluation-type="STRING_RESULT" overwrite="true" />
Но вышеприведенное выражение не будет хранить нулевое значение в заголовке, если xml похож на второй xml, который я показал выше. Я думаю, что мне нужно использовать троичный оператор в приведенном выше выражении. Кто-нибудь может предложить, пожалуйста, выражение, которое касается моей проблемы?
1 ответ
Это правда, XPath не такой оператор, но мы можем преодолеть это с помощью всего лишь SpEL. Благодаря Spring Integration у нас есть хава #xpath
SpEL-функция из коробки:
<int:header-enricher>
<int:header name="businessArea" expression="#xpath(payload, '//Code', 'boolean') ? null : #xpath(payload, '/businessArea')/>
</int:header-enricher>