我正在尝试创建xsd以将SWIFT MT940消息转换为xml。
这是我的XSD:
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema
xmlns:tns="urn:com.google/swift/mt940"
xmlns:ts="http://schemas.google.com/2003/02/TextSchema"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="urn:com.google/swift/mt940"
elementFormDefault="qualified"
ts:eofStrip="&#10;"
ts:numberFormat="#,###.#"
ts:rootElement="tns:File">
<xsd:element name="File">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="TransactionReference" type="xsd:string" ts:startTag=":20:" ts:endTag="\n"/>
<xsd:element name="RelatedReference" type="xsd:string" minOccurs="0" maxOccurs="0" ts:startTag=":21:" ts:endTag="\n"/>
<xsd:element name="AccountIdentification" type="xsd:string" ts:startTag=":25:" ts:endTag="\n"/>
<xsd:element name="StatementSequence" ts:startTag=":28C:" ts:endTag="\n">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="StatementNumber" ts:format="\d*" type="xsd:integer"/>
<xsd:element name="SequenceNumber" type="xsd:integer" minOccurs="0" ts:startTag="/"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="OpeningBalance" ts:startTag=":60F:" ts:endTag="\n">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="tns:CreditDebit"/>
<xsd:element name="Date" type="xsd:date" ts:fixedLength="6" ts:dateFormat="yymmdd"/>
<xsd:element name="Currency" type="xsd:string" ts:fixedLength="3"/>
<xsd:element name="Balance" type="xsd:decimal" ts:decimalSeparator="," ts:numberFormat="#"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="StatementLine" ts:startTag=":61:" ts:endTag="\n">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Date" type="xsd:date" ts:dateFormat="yymmdd" ts:fixedLength="6"/>
<xsd:element name="EntryDate" minOccurs="0" ts:format="\d{4}">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Month" type="xsd:integer" ts:fixedLength="2"/>
<xsd:element name="Day" type="xsd:integer" ts:fixedLength="2"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element ref="tns:CreditDebit"/>
<xsd:element name="FundsCode" type="xsd:string" minOccurs="0" ts:format="[^\d]"/>
<xsd:element name="Amount" type="xsd:decimal" ts:numberFormat="#" ts:decimalSeparator="," ts:format="[\d,]*"/>
<xsd:element name="TransactionType" type="xsd:string" ts:fixedLength="4"/>
<xsd:element name="CustomerReference" type="xsd:string" ts:format="[^/]*"/>
<xsd:element name="BankReference" type="xsd:string" minOccurs="0" ts:startTag="//"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="SupplementaryDetails" type="xsd:string" minOccurs="0" ts:format="[^:].*" ts:endTag="\n"/>
<xsd:element name="Information" ts:startTag=":86:" type="xsd:string" ts:endTag="\n"/>
<xsd:element name="ClosingBalance" ts:startTag=":62F:" ts:endTag="\n" type="tns:BalanceType"/>
<xsd:element name="ClosingAvailableBalance" ts:startTag=":64:" ts:endTag="\n" type="tns:BalanceType"/>
<xsd:element name="Unparsed" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="CreditDebit" ts:fixedLength="1">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:enumeration value="C"/>
<xsd:enumeration value="D"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
<xsd:complexType name="BalanceType">
<xsd:sequence>
<xsd:element ref="tns:CreditDebit" />
<xsd:element name="StatementDate" type="xsd:date" ts:dateFormat="yymmdd" ts:fixedLength="6" />
<xsd:element name="Currency" type="xsd:string" ts:fixedLength="3" />
<xsd:element name="Amount" type="xsd:decimal" ts:numberFormat="#" ts:decimalSeparator="," />
</xsd:sequence>
</xsd:complexType>
</xsd:schema>
Schema目前有元素“OpeningBalance”接受值,起始位置为:60F:并且“ClosingBalance”接受起始值为62F:的值。
但是MT940消息也可能有“OpeningBalance”开头:60M:和“ClosingBalance”以:62M:开头。就像下面的示例输入消息一样。
输入消息:
:20:0006/00000000008
:25:000005XXXXX
:28C:00003/00001
的:60F:C000506USD13874902,28
:61:0000000007D10001,03NTRF3600009 //三百万零四百零九分之七十万零七
DUM Dt Dummy Ltd
:86:023?00TRANSFER?0005030750002?32DUM Dt Dummy Ltd
的:62F:C100507USD21655902,09
:20:7906/00008000009
:25:000805XXXXX
:28C:00073/00002
的:60M:C100007USD21416405,09
:61:1005070507C204000,NTRF8007900003 // 700100/007900003
TES.ID 8007915903.182 SARO 07.05
:86:042?00GIRO?3100000000000?32TES.ID 8007000003.182 SARO?33 07.05
的:62M:C100007USD21000405,09
:64:C100507USD21655902,09
我想知道如何提及“OpeningBalance”接受以下开头的:60F:或:60M:并且类似地“ClosingBalance”具有:62F:或:62M:在相同的xsd中。
Deutschebank MT940格式规范:https://deutschebank.nl/nl/docs/MT94042_EN.pdf