XPath以获取不在mule esb中工作的节点

时间:2015-06-25 14:28:09

标签: xpath mule

我在变换器中跟随xml响应: -

<?xml version="1.0" encoding="UTF-8"?>
<detailList>
   <details>
      <Id>ID123</Id>
      <personInfo>
        <address>
         <address>All the address</address>
         <city>CITY</city>
         <state>STATE</state>         
         <postalCode>123123</postalCode>
         <country>UNITED STATES</country>        
         </address>
      </personInfo>
      <nameF>NAME1</nameF>
      <nameL>NAME2</nameL>
   </details>
</detailList>

我想获取详细信息节点(包括其所有子节点)。 我使用了以下xpath表达式来获取它,但所有这些都打印空格: -

<logger level="INFO" message="#[xpath://detailList]" />
<logger level="INFO" message="#[xpath:/detailList]" />
<logger level="INFO" message="#[xpath:/detailList/*]" />
<logger level="INFO" message="#[xpath://detailList/details]" />
<logger level="INFO" message="#[xpath:/detailList/details]" />

打印的响应是(LoggerMessageProcessor之后的空格): -

INFO  TimeStamp org.mule.api.processor.LoggerMessageProcessor: 

一切看起来都不错,但我很困惑为什么它无法通过这些xpath评估器找到节点/元素。

2 个答案:

答案 0 :(得分:0)

假设您使用3.5+(否则使用Xpath3())。您可以使用拆分器,在此之后不要保持记录器它会为您提供空的结果,如下面的org.dom4j.tree.DefaultElement@22a76cce [Element: <details attributes: []/>]。因此,使用任何需要`dom to xml'的变压器,然后logger将提供详细信息值。如果您不使用拆分器,请使用表达式组件或您当前使用的任何组件。

 <splitter expression="#[xpath('/detailList/details')]" doc:name="Splitter"/>

<mulexml:dom-to-xml-transformer doc:name="DOM to XML"/>
<logger message="****Logger:#[payload]" level="INFO" doc:name="Logger"/>

答案 1 :(得分:0)

你正在尝试的XPATH是旧的和被剥夺的 您可以使用新的Mule XPATH3轻松提取所有值: - https://developer.mulesoft.com/docs/display/current/XPath

例如: -

<splitter expression="#[xpath3('//detailList/details', message.payload, 'NODESET')]" doc:name="Splitter"/>
<logger level="INFO" message=" #[xpath3('Id', payload, 'STRING')]" doc:name="Logger"/>
<logger level="INFO" message=" #[xpath3('personInfo/address/address', payload, 'STRING')]" doc:name="Logger"/>

依旧......