在 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 其他更有用的东西会很有趣,但仅此而已。
我最近通过查阅此 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 其他更有用的东西会很有趣,但仅此而已。