【问题标题】:How to access the XML which comes out of Dataweave如何访问来自 Dataweave 的 XML
【发布时间】:2015-12-19 07:19:23
【问题描述】:

我尝试访问来自 DataWeave 的 xml 下的元素。它给我返回空值。

DataWeave 脚本是

%dw 1.0
%namespace ns0 urn:abc:dbc:Components
%output text/xml
---
ItemFee:{
    product_id:flowVars."Dept_id",
    TotalFees: sum payload.ns0#ItemResponse.ns0#Fees.*ns0#Fee.ns0#Fee
}

在这个数据编织之后,我有记录器节点和下面的消息。

#[message.payload.ItemFee.TotalFees]

我说错了

Execution of the expression "message.payload.ItemFee.TotalFees" failed. (org.mule.api.expression.ExpressionRuntimeException). Message payload is of type: WeaveMessageProcessor$WeaveOutputHandler

我想在这里再说一点。当我在“转换消息”之后立即在记录器中给出以下文本时。在控制台中打印的消息没有问题。但我无法访问 xml 消息中的元素。#[message.payloadAs(java.lang.String)]

【问题讨论】:

    标签: mule esb mule-component dataweave


    【解决方案1】:

    该 MEL 语法仅适用于 Java 对象。由于输出是 XML,您必须使用 xpath3 MEL 函数: https://docs.mulesoft.com/mule-user-guide/v/3.7/xpath#the-xpath3-function

    类似:

    #[xpath3('//ItemFee/TotalFees').text]
    

    【讨论】:

    • 当我在我的记录器中给出#[xpath3('//ItemFee/TotalFees').text] 时,它表明它在控制台中收到了 Null 消息。 INFO 2015-12-18 14:24:02,696 [[ebay_dec15th2015].HTTP_Listener_Configuration.worker.01] org.mule.api.processor.LoggerMessageProcessor: null 虽然我在 dataweaver 中设置了 'text/xml' 格式。当它来自“转换消息”组件时,它看起来像一个对象。
    • 我想在这里多说一点。当我在“转换消息”之后立即在记录器中给出以下文本时。在控制台中打印的消息没有问题。但我无法访问 xml 消息中的元素。#[message.payloadAs(java.lang.String)]
    • Ryan 有没有办法像我们在 XSLT 或 java 中那样在转换时在控制台中打印?
    【解决方案2】:

    谢谢瑞恩。你的回答帮助了我。我在我的记录器中输入了下面的内容。然后我就可以拿东西了。

    #[xpath3('//ItemFee/TotalFees')]
    

    早些时候我尝试过这些东西,我不知道为什么它不能更早地工作。可能是我忽略了这个问题。 :)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-18
      • 1970-01-01
      • 1970-01-01
      • 2018-08-07
      • 1970-01-01
      • 1970-01-01
      • 2017-10-20
      • 1970-01-01
      相关资源
      最近更新 更多