MapForce生成SWIFT ISO20022 XML:移除子元素冗余命名空间求助
解决ISO20022 XML生成中AppHdr子元素多余命名空间的问题
问题原因
<Fr>元素带上根命名空间urn:swift:saa:xsd:saa.2.0,是因为AppHdr的子元素被错误关联到了根Schema的类型,而非ISO20022头规范对应的命名空间类型,XML生成时为明确元素归属,自动添加了多余的命名空间声明。
方法一:通过MapForce配置修复
- 直接导入官方的
head.001.001.01.xsd(ISO20022应用头标准Schema),不要手动给AppHdr元素添加命名空间。 - 在映射中,将AppHdr节点关联到该Schema的根
AppHdr元素,确保其所有子元素(如<Fr>)都使用该Schema中定义的类型,而非根Schema的类型。 - 检查数据源映射:如果
<Fr>是从其他数据源映射过来的,要确保映射目标是ISO20022头Schema里的<Fr>节点,而非根命名空间下的同名元素。
方法二:修改XML Schema修复
如果需要自定义Schema,按以下步骤调整:
- 在根Schema(DataPDU所在的xsd)的
<xs:schema>标签内导入ISO20022头的Schema:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="urn:swift:saa:xsd:saa.2.0" xmlns="urn:swift:saa:xsd:saa.2.0" elementFormDefault="qualified"> <!-- 导入ISO20022应用头Schema --> <xs:import namespace="urn:iso:std:iso:20022:tech:xsd:head.001.001.01" schemaLocation="head.001.001.01.xsd"/> <!-- 定义DataPDU、Header、Body等结构 --> <xs:element name="DataPDU"> <xs:complexType> <xs:sequence> <xs:element name="Header" type="xs:anyType"/> <xs:element name="Body"> <xs:complexType> <!-- 使用导入的命名空间定义AppHdr元素 --> <xs:element name="AppHdr" type="head:AppHdr" xmlns:head="urn:iso:std:iso:20022:tech:xsd:head.001.001.01"/> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
- 确保
head.001.001.01.xsd文件路径正确,这样AppHdr的所有子元素会自动继承它的命名空间,不会带上根命名空间的声明。
内容的提问来源于stack exchange,提问作者Sam CMS
相关产品推荐
相关产品推荐

