首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mule anypoint中的Xpath

mule anypoint中的Xpath
EN

Stack Overflow用户
提问于 2014-07-26 23:03:09
回答 4查看 838关注 0票数 1

我需要使用一个选择路由器来根据输入XML中的特定字段值路由消息。我正在使用最新版本的任何点演播室。我无法使用XPath检索和比较特定字段中的值,然后相应地路由它。有人能让我知道如何使用Xpath将载体字段与UPS进行比较吗?下面是示例XML文件:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<deliver-order xmlns="http://checkout.google.com/schema/2"
google-order-number="841171949013218">
<tracking-data>
<carrier>UPS</carrier>
<tracking-number>Z5498W45987123684</tracking-number>
</tracking-data>
<send-email>true</send-email>
</deliver-order>

我需要从上面的xml中检索载体字段。我在选择路由器中使用xpath表达式,比如#xpath(‘/交货-订单/跟踪-数据/运营商’== 'UPS‘)。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-07-27 06:35:01

我得到了<carrier>的值,并从记录器输出到控制台.还根据字段值路由消息。下面是我所做的工作:-我将xml作为文件,我的Mule配置是:-

代码语言:javascript
复制
    <file:connector name="File_Global" autoDelete="true" streaming="true" validateConnections="true" doc:name="File"/>
<flow name="aaFlow1" doc:name="aaFlow1">
   <file:inbound-endpoint responseTimeout="10000" connector-ref="File_Global" doc:name="File"  path="E:\backup\test">
          <file:filename-regex-filter pattern="input.xml" caseSensitive="false"/>
  </file:inbound-endpoint>
<logger message="Trying to process : #[xpath://.[xpath:local-name()='deliver-order']/*[xpath:local-name()='tracking-data']/*[xpath:local-name()='carrier']]" level="INFO" doc:name="Logger"/> <!--Print the value of carrier -->

<choice doc:name="Choice">
  <when expression="#[xpath://.[xpath:local-name()='deliver-order']/*[xpath:local-name()='tracking-data']/*[xpath:local-name()='carrier'] ='UPS']">
   <processor-chain doc:name="Processor Chain">
     <logger message="MATCHED" level="INFO" doc:name="Logger" />
  </processor-chain>
</when>
<otherwise>
   <processor-chain doc:name="Processor Chain">
 <logger message="NO MATCH" level="INFO" doc:name="Logger" />
 </processor-chain>
</otherwise>
</choice>
</flow>
票数 1
EN

Stack Overflow用户

发布于 2014-07-27 07:15:51

可以使用mulexml:namespace-manager元素:http://www.mulesoft.org/documentation/display/current/XML+Namespaces清除xpath表达式。

我不得不

代码语言:javascript
复制
 <mulexml:dom-to-xml-transformer doc:name="DOM to XML"/>

元素,以便能够解析.xml (MuleStudio 3.5)

我的完整流程:

代码语言:javascript
复制
<file:connector name="File_Global" autoDelete="false" streaming="true" validateConnections="true" doc:name="File" />

<mulexml:namespace-manager includeConfigNamespaces="true">
   <mulexml:namespace prefix="gco" uri="http://checkout.google.com/schema/2"/>
  </mulexml:namespace-manager>

<flow name="aaFlow1" doc:name="aaFlow1">
   <file:inbound-endpoint responseTimeout="10000" connector-ref="File_Global" doc:name="File"  path="/Users/vmbram/Documents">
          <file:filename-regex-filter pattern="input.xml" caseSensitive="false"/>
  </file:inbound-endpoint>

<logger message="Trying to process : #[xpath('/gco:deliver-order/gco:tracking-data/gco:carrier').text]" level="INFO" doc:name="Logger"/> <!--Print the value of carrier -->

<choice doc:name="Choice">
  <when expression="#[xpath('/gco:deliver-order/gco:tracking-data/gco:carrier')]">
   <processor-chain doc:name="Processor Chain">
     <logger message="MATCHED" level="INFO" doc:name="Logger" />
  </processor-chain>
</when>
<otherwise>
   <processor-chain doc:name="Processor Chain">
 <logger message="NO MATCH" level="INFO" doc:name="Logger" />
 </processor-chain>
</otherwise>
</choice>
</flow>
票数 0
EN

Stack Overflow用户

发布于 2014-07-28 17:38:31

xpath表达式是错误的。使用这个/交付订单/跟踪-数据/承运人/文本()来获取实际的载波,而不是节点。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24976332

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档