从自定义 Dataweave 模块导入 xml 命名空间
Import xml namespace from custom Dataweave module
我正在尝试创建一个自定义 Dataweave 模块来集中我的自定义 XML 命名空间。
我关注了Mulesoft的官方文档:https://docs.mulesoft.com/mule-runtime/4.3/dataweave-create-module
它指出:“当您将自定义模块导入另一个 DataWeave 脚本时,模块中定义的任何函数、变量、类型和命名空间都可用于 DataWeave 主体”。
所以我期待我可以创建一个包含我的命名空间的模块(在模块文件夹中):Namespaces.dwl
ns myNs1 http://namespaces/my1
ns myNs2 http://namespaces/my2
像这样在另一个 Dataweave 中导入该模块:
%dw 2.0
import * from modules::Namespaces
output application/java
---
{
body: {
myNs1#Response: {
outcome: 'ACCEPTED'
}
} write "application/xml"
}
但是我得到了这个错误:
之前未使用 ns 声明前缀 myNs1
我 运行 使用 Mule 4.3.0
正如 aled 所指出的,这可能是文档中的错误或不正确的信息。据我所见,命名空间已正确导入,但前缀似乎应该在本地声明。
您可以使用以下:
%dw 2.0
import * from modules::Namespaces
output application/java
var myNs1Local = myNs1 as Namespace
---
{
body: {
myNs1Local#Response: {
outcome: 'ACCEPTED'
}
} write "application/xml"
}
这将导致预期的输出。
{
body: "<?xml version='1.0' encoding='UTF-8'?>\n<myNs1:Response xmlns:myNs1=\"http://namespaces/my1\">\n <outcome>ACCEPTED</outcome>\n</myNs1:Response>" as String {class: "java.lang.String"}
} as Object {encoding: "UTF-8", mediaType: "*/*", mimeType: "*/*", class: "java.util.LinkedHashMap"}
注意这里我用作前缀的是声明的变量(myNs1Local),但它仍然写入Namespace.dwl
中引用的前缀
我正在尝试创建一个自定义 Dataweave 模块来集中我的自定义 XML 命名空间。
我关注了Mulesoft的官方文档:https://docs.mulesoft.com/mule-runtime/4.3/dataweave-create-module
它指出:“当您将自定义模块导入另一个 DataWeave 脚本时,模块中定义的任何函数、变量、类型和命名空间都可用于 DataWeave 主体”。
所以我期待我可以创建一个包含我的命名空间的模块(在模块文件夹中):Namespaces.dwl
ns myNs1 http://namespaces/my1
ns myNs2 http://namespaces/my2
像这样在另一个 Dataweave 中导入该模块:
%dw 2.0
import * from modules::Namespaces
output application/java
---
{
body: {
myNs1#Response: {
outcome: 'ACCEPTED'
}
} write "application/xml"
}
但是我得到了这个错误:
之前未使用 ns 声明前缀 myNs1
我 运行 使用 Mule 4.3.0
正如 aled 所指出的,这可能是文档中的错误或不正确的信息。据我所见,命名空间已正确导入,但前缀似乎应该在本地声明。
您可以使用以下:
%dw 2.0
import * from modules::Namespaces
output application/java
var myNs1Local = myNs1 as Namespace
---
{
body: {
myNs1Local#Response: {
outcome: 'ACCEPTED'
}
} write "application/xml"
}
这将导致预期的输出。
{
body: "<?xml version='1.0' encoding='UTF-8'?>\n<myNs1:Response xmlns:myNs1=\"http://namespaces/my1\">\n <outcome>ACCEPTED</outcome>\n</myNs1:Response>" as String {class: "java.lang.String"}
} as Object {encoding: "UTF-8", mediaType: "*/*", mimeType: "*/*", class: "java.util.LinkedHashMap"}
注意这里我用作前缀的是声明的变量(myNs1Local),但它仍然写入Namespace.dwl
中引用的前缀