首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >快速的MT txt到MT XML转换

快速的MT txt到MT XML转换
EN

Stack Overflow用户
提问于 2018-09-21 12:19:16
回答 1查看 3.6K关注 0票数 1

我需要将下面的MT txt文件( MT 760的示例)转换为MT格式。我正在使用SWIFT MT2XML类进行转换。下面是示例输入文件,并引用了2018年的相应模式,即fin.760.2018.xsd

SampleMT760.txt (它包含虚拟数据)

代码语言:javascript
复制
{1:F01AAAAAAAAAAAI1111111111}
{2:O111111111111XXXXXXXXXXXX111111111111111111111N}
{3:{108:T1A11111111111A111}}
{4:
:27:1/1
:20:123456123456ABCD
:23:ISSUE
:30:180813
:40C:URDG
:77C:SOME MESSAGE
:72:/PHONBEN/
-}
{5:{CHK:}{TNG:}}{S:{SAC:}{COP:P}{MAN:A2A11}}

TranslationSvc.java:翻译的代码片段

代码语言:javascript
复制
public static void translate(String inputData) throws Exception { 

        // parse the XML schema for the entire MT message (block 1 to 5)
        final DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
        builderFactory.setNamespaceAware(true);
        final DocumentBuilder builder = builderFactory.newDocumentBuilder();
        final Document schema = builder.parse(new File(SCHEMA_FILE)); 

        // create a ISchemaDocResolver which loads the correct schema by filename
        ISchemaDocResolver resolver = new ISchemaDocResolver() {
            public SchemaDoc resolveSchemaDoc(final String pNamespaceURI) {
                // the namespace which is passed here it the namespace of the
                // block 4 content
                if (pNamespaceURI.endsWith("fin.760.2018")) {
                    DocumentBuilder builder = null;
                    try {
                        builder = builderFactory.newDocumentBuilder();
                    } catch (ParserConfigurationException e) {
                        e.printStackTrace();
                    }
                    Document schema = null;
                    try {
                        schema = builder.parse(new File(SCHEMA_FILE));
                    } catch (SAXException | IOException e) {
                        e.printStackTrace();
                    }
                    return new SchemaDoc(schema);
                }
                return null;
            }
        };

            final SchemaDoc schemaDoc = new SchemaDoc(schema, resolver);
            final MT2Xml mt2xml = new MT2Xml(schemaDoc);

        // convert an entire MT message (block 1 to 5) to its corresponding XML format
        final Document result = builder.newDocument();
        mt2xml.convert(inputData, result);
    }

当我尝试执行TranslationSvc时,我收到以下ConversionError:

代码语言:javascript
复制
Exception in thread "main" com.swift.converter.ErrorReportException: <ErrorReport>
<ConversionErrors>
<Error>
<Code>
TC00100
</Code>
<Message>
Unexpected field 1
</Message>
<Location>
<LineNumber>
0
</LineNumber>
</Location>
</Error>
</ConversionErrors>
</ErrorReport>

    at com.swift.converter.ReportErrorHandler.checkEnd(ReportErrorHandler.java:205)
    at com.swift.converter.MT2Xml.convert(MT2Xml.java:164)
    at com.swift.converter.MT2Xml.convert(MT2Xml.java:189)
    at TranslationSvc.translation(TranslationSvc.java:95)
    at TranslationSvc.main(TranslationSvc.java:47)

能否有人建议输入文件的格式是否正确?如果有人能给我提供样例工作输入文件,那就太好了。

EN

回答 1

Stack Overflow用户

发布于 2018-09-22 01:00:29

您的示例消息不正确。第2块中的消息类型指的是一个MT011,它是一个系统消息,而不是您期望的MT760。

入站MT760的第2块应该如下所示:

{2:O7601155081106BBBBUS00DGST08298565620811060655N}

您可以在日期、时间和BIC代码中放置虚拟数据,但必须保留消息类型。

入站消息中应用程序头(块2)的结构如下:

  • O=输出
  • 消息类型
  • 输入与发件人有关的时间
  • 带有发件人地址的消息输入引用(MIR),包括输入日期。
  • 与接收方有关的输出日期和时间
  • 消息优先级

您可以在https://www.prowidesoftware.com/resources/SWIFT上找到更多信息,顺便说一句,我是开源库Prowide的作者之一,该库包括MT到XML转换。它不是SWIFT使用的相同的XML,而是Prowide的专有XML。关键的区别在于SWIFT转换要求输入消息至少在结构上是有效的,而Prowide Core XML可以来回转换任何MT,有效或无效。

PD:完整的MT760样本

代码语言:javascript
复制
{1:F01NWBKGB2LD36A6294534377}{2:O7601155081106BBBBUS00DGST08298565620811060655N}{4: [CRLF]
:27:1/1 [CRLF]
:20:123456123456ABCD [CRLF]
:23:ISSUE [CRLF]
:30:180813 [CRLF]
:40C:URDG [CRLF]
:77C:SOME MESSAGE [CRLF]
SECOND LINE [CRLF]
-}

回车和送线的地方

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52443616

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档