gpt4 book ai didi

xpath - 如何在camel-context.xml 中使用xpath 来检查特定节点是否存在

转载 作者:行者123 更新时间:2023-12-03 15:34:47 25 4
gpt4 key购买 nike

我正在尝试开发基于内容的路由 Camel 应用程序。此应用程序将查看文件夹 src/data 以查看是否存在包含节点 <e2d:getOrderDetaiRequest> 的 SOAP 请求文件。 ,然后该文件将被复制到目标/消息,否则文件将被复制到目标/其他。

您知道如何使用 xpath(或任何其他工具)来检查该条件(我更喜欢使用 camel-context.xml 文件)?

这是我的 Camel 语境

<route>
<from uri="file://c:/src/data?noop=true"/>
<choice>
<when>
<xpath>**???????????????????????????**</xpath>
<to uri="file://c:/target/message"/>
</when>
<otherwise>
<to uri="file://c:/target/other"/>
</otherwise>
</choice>
</route>

这是 2 个不同 SOAP 请求的示例
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:e2d="http://www.abc.com/Abc11WS">
<soapenv:Header/>
<soapenv:Body>
<e2d:getOrderDetailRequest>
<actionCode>1234</actionCode>
</..>
</...></...>


<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:lsr="http://www.abc.com/Abc22WS">
<soapenv:Header/>
<soapenv:Body>
<lsr:getProductDetailsRequest>
<productId>12345</...>
</...></...></...>

最佳答案

当使用 xpath 并且您的 xml 具有 namespace (例如您的 SOAP 消息)时,您也必须在 xpath 表达式中使用 namespace 。

Camel 文档中有一些详细信息:http://camel.apache.org/xpath

通过在 Camel 中使用 XML DSL,您可以直接在 XML 标记中声明命名空间,例如在 camelContext 等中。

<camelContext xmlns="http://camel.apache.org/schema/spring" e2d="http://www.abc.com/Abc11WS">
...
<when>
<xpath>/e2d:getOrderDetailRequest</xpath>
...

但请注意,XPath 要正常工作可能有点棘手。这就是我们在 Camel 2.10 中添加 logNamespaces 的原因。详情见本页底部: http://camel.apache.org/xpath

关于xpath - 如何在camel-context.xml 中使用xpath 来检查特定节点是否存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9626285/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com