【问题标题】:Anypoint Studio problem with JSON into XML transformation将 JSON 转换为 XML 的 Anypoint Studio 问题
【发布时间】:2022-01-22 10:16:46
【问题描述】:

我正在尝试将 JSON 响应转换为 XML,然后使用有效负载调用 SOAP API。我设法毫无问题地获得 JSON 响应,但我无法将其转换为 XML。问题是数据必须是格式:

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <NumberToDollars xmlns="http://www.dataaccess.com/webservicesserver/">
      <dNum>47.92</dNum>
    </NumberToDollars>
  </soap:Body>
</soap:Envelope> 

但是当我将此作为Transform Messages 模块的示例时,它会创建:

%dw 2.0
output application/xml
ns ns00 http://schemas.xmlsoap.org/soap/envelope/
ns ns01 http://www.dataaccess.com/webservicesserver/
---
{
    ns00#Envelope: {
        ns00#Body: {
            ns01#NumberToDollars: {
                ns01#dNum: payload.decimal
            }
        }
    }
}

当我使用Logger 查看输出时:

<?xml version='1.0' encoding='UTF-8'?>
<ns00:Envelope xmlns:ns00="http://schemas.xmlsoap.org/soap/envelope/">
  <ns00:Body>
    <ns01:NumberToDollars xmlns:ns01="http://www.dataaccess.com/webservicesserver/">
      <ns01:dNum>47.92</ns01:dNum>
    </ns01:NumberToDollars>
  </ns00:Body>
</ns00:Envelope>

我知道我可以手动更改它,我设法让它看起来像这样:

%dw 2.0
output application/xml
ns soap http://schemas.xmlsoap.org/soap/envelope/
ns ns01 http://www.dataaccess.com/webservicesserver/
---
{
    soap#Envelope: {
        soap#Body: {
            NumberToDollars: {
                dNum: payload.decimal
            }
        }
    }
}

输出:

<?xml version='1.0' encoding='UTF-8'?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <NumberToDollars>
      <dNum>47.92</dNum>
    </NumberToDollars>
  </soap:Body>
</soap:Envelope>

但我不知道如何在没有命名空间的情况下获取 NumberToDollarsbe 并同时拥有 xmlns 链接(我怎样才能摆脱 ns00 并同时保持链接)。

我在 Mule 文档中检查了所有关于它的内容,但没有发现任何问题,请帮忙。

【问题讨论】:

    标签: mule dataweave mulesoft anypoint-studio


    【解决方案1】:

    一种方法是将xmlns 定义为一个普通属性:

    %dw 2.0
    output application/xml
    ns ns00 http://schemas.xmlsoap.org/soap/envelope/
    ns ns01 http://www.dataaccess.com/webservicesserver/
    ---
    {
        ns00#Envelope: {
            ns00#Body: {
                NumberToDollars @(xmlns: "http://www.dataaccess.com/webservicesserver/"): {
                    dNum: payload.decimal
                }
            }
        }
    }
    

    【讨论】:

    • 感谢您的回复,现在我有最后一个问题。有没有办法让我保存这个回复?因为当我之后创建Consume 时,它出于某种原因删除了信封和正文标签(我认为)并返回Error processing request: No such method: Envelope。我试图将它保存到变量,但它做同样的事情。
    • 如果您能向我解释为什么当我调用 #[payload] 时它会改变它之前的外观,我将不胜感激,我必须再次按照您向我展示的方式添加 xmlns 并更改 ns00肥皂...
    • 在 Web 服务消费者中使用?这不是原始问题的一部分。请发布一个新问题,我很乐意提供帮助。
    • #[payload] 问题相同。请提供详细信息(输入、输出),以便我们了解问题。
    猜你喜欢
    • 2013-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-26
    相关资源
    最近更新 更多