首页 > 解决方案 > Mule 3.9 - 无法使用 Xpath3 NODESET 的 foreach 获取 xml 值

问题描述

我无法使用 Mule 3.9.5 中的以下代码片段检索 XML 值,它适用于较低版本。根据我的用例,我正在寻找仅使用 foreach 而不是拆分器的 XPath 解决方案。

骡流XML

<foreach collection="#[xpath3('/ParentData/Data', payload, 'NODESET')]">

示例 XML

<ParentData>
  <Data>
    <test1>value1</test1>
    <test2>value2</test2>
  </Data>
  <Data>
    <test1>value1</test1>
    <test2>value2</test2>
  </Data>
</ParentData>

实际输出

[]

预期产出

<Data>
    <test1>value1</test1>
    <test2>value2</test2>
</Data>
<Data>
    <test1>value1</test1>
    <test2>value2</test2>
</Data>

有什么建议么 ?

标签: xpathmulemule4mule-esb

解决方案


使用 xpath3() 返回用 Java 类实现的 XML 的节点列表net.sf.saxon.dom.DOMNodeList。由于某种原因,它不会打印<logger>.

我认为使用 DataWeave 脚本会更清晰、更直观、更好地记录和移植到 Mule 的未来版本。

例子:

        <dw:transform-message doc:name="Transform Message">
          <dw:input-payload mimeType="application/xml" />
          <dw:set-variable variableName="data"><![CDATA[
            %dw 1.0
            %output application/java
            ---
            payload.ParentData.*Data
          ]]>
          </dw:set-variable>
        </dw:transform-message>    
    
        <foreach collection="#[flowVars.data]" doc:name="For Each">
            <logger message="Data=#[payload]" level="INFO" doc:name="Logger"/>
        </foreach>

输出:

Data={test1=value1, test2=value2}
Data={test1=value1, test2=value2}

在 Mule 4 中,您可以直接在<foreach>.


推荐阅读