如何生成无前缀多命名空间的ISO20022 SWIFT SAA兼容XML?
解决方案:生成无命名空间前缀的ISO20022 SWIFT报文XML
要实现目标XML的无前缀输出,需要从XSD结构编写和Mapforce输出配置两方面调整:
一、正确编写XSD Schema
三个命名空间对应独立XSD,主XSD通过xs:import引入其他两个,确保所有XSD的elementFormDefault设为qualified(保证元素归属对应命名空间)。
1. 主XSD(namespace1,data.xsd)
<?xml version="1.0" encoding="UTF-8"?> <xs:schema targetNamespace="namespace1" xmlns="namespace1" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:ns2="namespace2" xmlns:ns3="namespace3" elementFormDefault="qualified"> <!-- 引入其他命名空间的Schema --> <xs:import namespace="namespace2" schemaLocation="header.xsd"/> <xs:import namespace="namespace3" schemaLocation="doc.xsd"/> <!-- 定义根元素Data及内部结构 --> <xs:element name="Data"> <xs:complexType> <xs:sequence> <!-- Data下的其他元素 --> <xs:element name="Body"> <xs:complexType> <xs:sequence> <!-- 引用namespace2的Header全局元素 --> <xs:element ref="ns2:Header"/> <!-- 引用namespace3的Doc全局元素 --> <xs:element ref="ns3:Doc"/> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
2. Header的XSD(namespace2,header.xsd)
<?xml version="1.0" encoding="UTF-8"?> <xs:schema targetNamespace="namespace2" xmlns="namespace2" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> <!-- 定义Header元素及子元素 --> <xs:element name="Header"> <xs:complexType> <xs:sequence> <!-- 替换为实际业务元素 --> <xs:element name="MessageId" type="xs:string"/> <xs:element name="CreationDate" type="xs:dateTime"/> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
3. Doc的XSD(namespace3,doc.xsd)
<?xml version="1.0" encoding="UTF-8"?> <xs:schema targetNamespace="namespace3" xmlns="namespace3" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> <!-- 定义Doc元素及子元素 --> <xs:element name="Doc"> <xs:complexType> <xs:sequence> <!-- 替换为实际业务元素 --> <xs:element name="TransactionId" type="xs:string"/> <xs:element name="Amount" type="xs:decimal"/> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
二、Mapforce输出配置调整
Mapforce默认会为跨命名空间元素分配前缀,需手动修改元素输出属性:
- 打开映射项目,选中
Header元素(来自namespace2),在右侧属性面板中:- 将命名空间前缀设为空
- 勾选在该元素上声明默认命名空间
- 对
Doc元素(来自namespace3)执行完全相同的设置 - 确保XML输出组件的全局命名空间设置中,不为namespace2、namespace3分配固定前缀
完成以上设置后,生成的XML会自动在Header和Doc元素上声明局部默认命名空间,其子元素将继承该命名空间且无前缀。
内容的提问来源于stack exchange,提问作者Sam CMS
相关产品推荐
相关产品推荐

