Xml WSO2中Xpath 2.0中If/else语句的使用

Xml WSO2中Xpath 2.0中If/else语句的使用,xml,xpath,wso2,wso2esb,xpath-2.0,Xml,Xpath,Wso2,Wso2esb,Xpath 2.0,我正在WSO2 Developer studio中使用XPATH 2.0对负载中介中的数据执行一些转换。在一次转换中,我必须检查遗留服务响应中是否存在元素,然后打印“是,它存在”,否则打印“否,它不存在” 我使用以下语法 if(fn:exists(//*/*[local-name()='HomePhone'])) then fn:concat('Yes','it does') else fn:concat('No','it dont') 它给了我以下的错误信息。 我对语法感到困惑。在我的

我正在WSO2 Developer studio中使用XPATH 2.0对负载中介中的数据执行一些转换。在一次转换中,我必须检查遗留服务响应中是否存在元素,然后打印“是,它存在”,否则打印“否,它不存在”

我使用以下语法

if(fn:exists(//*/*[local-name()='HomePhone'])) then fn:concat('Yes','it does') 

else fn:concat('No','it dont')
它给了我以下的错误信息。

我对语法感到困惑。在我的特定场景中,在XPath2.0中使用If/else的正确方法是什么


注意:“fn:concat”函数本身工作正常

我相信您正在尝试在ESB中实现synapse配置,以实现If-then-ELSE闭包

您需要使用过滤器中介来实现这一点,即ESB Synapse

 <filter source="fn:exists(//*/*[local-name()='HomePhone'])" regex="false">
            <then>
               <log level="custom">
                  <property name="*********" value="NULL Property Value"/>
               </log>
            </then>
            <else>
               <log level="custom">
                  <property name="*********" value="NOT NULL Property Value"/>
               </log>
            </else>
         </filter>

请在[1]上查找筛选器中介程序文档


[1]

参考上面Dharshana的评论,fn:exists在我的机器上不工作,事实上以下代码工作正常:

<filter xpath="//*/*[local-name()='HomePhone']" regex="false">


虽然“给我错误”可能是任何东西,但我猜是
不要
中的撇号让你感到悲伤。我在删除它后尝试过,但同样的问题。。。。。。。建议虽然WSO2 2.5.0以后的版本支持XPath 2.0,但它在默认情况下是禁用的,需要一些配置才能正常工作。我不知道WSO2,但错误明确地表明此表达式正在由XPath 1.0解析器处理。尽管如果它接受concat()上的“fn:”前缀,这意味着某种程度的2.0意识。