在 Dataweave 2.0 中添加默认名称空间的其他方法?

Other ways to add default namespaces in Dataweave 2.0?

我最近通过查阅此 doc page.

了解了如何在 XML 中添加默认名称空间
%dw 2.0
output application/xml
var dns = {uri: "http://api.acme.com/customer", prefix: ""} as Namespace
---
dns#customer: {
    dns#name: "Max",
    dns#city: "LA"
}

生成以下 xml:

<?xml version='1.0' encoding='UTF-8'?>
<customer xmlns="http://api.acme.com/customer">
  <name>Max</name>
  <city>LA</city>
</customer>

还有其他方法可以使用 ns 声明吗?关于 Namespace 类型的任何文档?我找不到。

它是一个相当简单的类型,可能定义如下:

%dw 2.0
type Namespace = {
   URI: String,
   prefix: String
}

Namespace 仅与 XML 一起使用,并且具有相当基本的信息。我有几个 'recipes' 我用的,比如递归附加名称空间的东西:

%dw 2.0

fun appendNamespace(data, nsSelector: (k: Key) -> Namespace | Null) =
  data match {
    case is Array -> data map appendNamespace($, nsSelector)
    case is Object -> data mapObject do {
      var ns0 = nsSelector($$)
      ---
      if (ns0 != null) ns0#"$($$)": appendNamespace($, nsSelector)
      else ($$): appendNamespace($, nsSelector)
    }
    else -> data
}

这样使用:

%dw 2.0

ns soapenv http://schemas.xmlsoap.org/soap/envelope/
ns tem http://tempuri.org/

output application/xml
---
{
    soapenv#Envelope: {
        soapenv#Header: null,
        soapenv#Body: payload appendNamespace tem
    }
}

当然还有名称空间选择器 (payload.someKey.#),其中 returns 是该键的 Namespace 对象。除此之外,我还没有看到其他关于它的实际用例或与之交互的有用方法。看到某人 post 其他更有用的东西会很有趣,但仅此而已。