【问题标题】:XPath to obtain a node not working in mule esbXPath 获取不在 mule esb 中工作的节点
【发布时间】:2015-08-06 15:24:44
【问题描述】:

我有以下来自转换器的 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>

我想获取 details 节点(包括它的所有子节点)。 我使用了以下 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 评估器定位节点/元素。

【问题讨论】:

  • 试试//details,可能是根元素的问题
  • 我已经试过了,结果是空字符串。
  • 您使用的是哪个版本的 Mule?该语法已被弃用。尝试使用 MEL xpath() 函数甚至更好的 xpath3() developer.mulesoft.com/docs/display/current/…

标签: xpath mule


【解决方案1】:

假设您使用的是 3.5+(否则使用 Xpath3())。您可以使用拆分器,之后不要保留记录器,它会为您提供空结果,如下面org.dom4j.tree.DefaultElement@22a76cce [Element: &lt;details attributes: []/&gt;]。所以使用任何需要 `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"/>

【讨论】:

    【解决方案2】:

    您正在尝试的 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"/>
    

    等等..

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-09
      相关资源
      最近更新 更多