【问题标题】:Mule 3.9 - Unable to fetch xml value using foreach of Xpath3 NODESETMule 3.9 - 无法使用 Xpath3 NODESET 的 foreach 获取 xml 值
【发布时间】:2021-09-26 15:05:07
【问题描述】:

我无法在 Mule 3.9.5 中使用以下代码 sn-p 检索 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>

有什么建议吗?

【问题讨论】:

  • 为什么它必须是明确的 spath?不接受其他潜在解决方案的原因是什么?预期的输出是什么? Xpath 表达式还是 foreach?
  • 我想我已经发布了你询问的所有细节
  • 我不这么认为。在那种情况下我不会问。
  • 您可以在帖子本身中看到预期的输出,原因是我使用 XPath 寻找 foreach 以避免重复的代码更改。清楚了吗?

标签: xpath mule mule4 mule-esb


【解决方案1】:

使用 xpath3() 返回用 Java 类 net.sf.saxon.dom.DOMNodeList 实现的 XML 节点列表。由于某种原因,它不会在&lt;logger&gt; 中打印每个节点的详细信息。

我认为改用 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 中,您可以直接在 &lt;foreach&gt; 中使用 DataWeave 表达式。

【讨论】:

  • 毫无疑问,这是完美的。谢谢。是不是用 Mule 表达语言而不是 DW 的东西?
  • 我不太明白你的问题。你能澄清一下吗?
  • 在 Dataweave 的解决方案之上,但我只在 xpath3 的帮助下使用 Mule 表达式进行探索。
猜你喜欢
  • 1970-01-01
  • 2015-07-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多