应用程序和运行时版本: Mule 4 应用程序,带有 XML 模块。
我正在尝试创建具有许多自定义 xml 命名空间的 mule 应用程序。看来前缀应该在本地声明,像这样,
%dw 2.0
output application/xml
ns orders http://www.acme.com/shemas/Orders
ns stores http://www.acme.com/shemas/Stores
---
root:
orders#orders: {
stores#shipNodeId: "SF01",
stores#shipNodeId @(shipsVia:"LA01"): "NY03"
}
有什么方法可以集中自定义 XML 命名空间吗?
1. 尝试了一些东西: 从自定义 Dataweave 模块导入 xml 命名空间
我尝试创建一个自定义模块并声明命名空间并将其导入到我的 dataweave 中,但似乎前缀应该在本地声明
命名空间.dwl
ns myNs1 http://namespaces/my1
ns myNs2 http://namespaces/my2
数据编织:
%dw 2.0
import * from modules::Namespaces
output application/java
---
{
body: {
myNs1#Response: {
outcome: 'ACCEPTED'
}
} write "application/xml"
}
但这不起作用,这又需要在本地声明前缀,类似这样。在本地声明前缀后,这可以工作。
%dw 2.0
import * from modules::Namespaces
output application/java
var myNs1Local = myNs1 as Namespace
---
{
body: {
myNs1Local#Response: {
outcome: 'ACCEPTED'
}
} write "application/xml"
}
在本地声明前缀后,这可以工作。
2. 我试图理解此处记录的名称空间目录: https://docs.mulesoft.com/xml-module/latest/xml-xpath
文档解释了如何将其与 Xpaths 一起使用,但不确定如何在创建 XML 时使用它,找不到任何文档。
<xml-module:namespace-directory name="fullNs">
<xml-module:namespaces>
<xml-module:namespace prefix="soap" uri="http://schemas.xmlsoap.org/soap/envelope/"/>
<xml-module:namespace prefix="mule" uri="http://simple.component.mule.org/"/>
</xml-module:namespaces>
</xml-module:namespace-directory>
<flow name="xpathWithFullNs">
<xml-module:xpath-extract
xpath="/soap:Envelope/soap:Body/mule:echo/mule:echo"
namespaceDirectory="fullNs"/>
</flow>
修复小错误后,第一种方法奏效了。
创建了一个自定义模块并声明了命名空间并将其导入到我的 dataweave 中,无需在本地 dataweave 中再次声明前缀。
命名空间.dwl
ns myNs1 http://namespaces/my1
ns myNs2 http://namespaces/my2
数据编织:
%dw 2.0
import * from modules::Namespaces
output application/java
---
{
body: {
myNs1#Response: {
outcome: 'ACCEPTED'
}
} write "application/xml"
}