如何使用VB.net将.xml银行对帐单转换为.csv tex文件?

时间:2019-07-12 08:39:36

标签: xml vb.net csv

我想将.xml文件中的银行对帐单转换为对眼睛更友好的.csv文件。

.xml文件具有如此多的节点和子节点,我似乎无法找到如何读取节点内部的许多子层的信息。

我需要为此使用带有VB.net的Visual Studio 2012。

我已经尝试了几个示例,但是作为一个新手,我真的无法使其工作。

感谢所有的建议!

编辑:

嗨!我已经准备好要发布的示例了,但是不知何故忘了将其粘贴到我的帖子中...

示例XML银行对帐单:

<Document
    xmlns="urn:iso:std:iso:20022:tech:xsd:camt.053.001.02"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <BkToCstmrStmt>
        <GrpHdr>
            <MsgId>MSGSTMT1234567890123457890</MsgId>
            <CreDtTm>2019-02-13T17:17:18.2369252+01:00</CreDtTm>
        </GrpHdr>
        <Stmt>
            <Id>SKBSTMT5/2019-EUR</Id>
            <LglSeqNb>20195</LglSeqNb>
            <CreDtTm>2019-01-01T00:00:00</CreDtTm>
            <Acct>
                <Id>
                    <IBAN>DE012345678901234</IBAN>
                </Id>
                <Ownr>
                    <Nm>COMPANY NAME</Nm>
                    <PstlAdr>
                        <Ctry>DE</Ctry>
                        <AdrLine>ADDRESS 1</AdrLine>
                        <AdrLine>ADDRESS 2</AdrLine>
                    </PstlAdr>
                </Ownr>
                <Svcr>
                    <FinInstnId>
                        <BIC>BICCODE</BIC>
                        <Nm>BANK NAME</Nm>
                        <PstlAdr>
                            <Ctry>DE</Ctry>
                        </PstlAdr>
                    </FinInstnId>
                </Svcr>
            </Acct>
            <Bal>
                <Tp>
                    <CdOrPrtry>
                        <Cd>OPBD</Cd>
                    </CdOrPrtry>
                </Tp>
                <Amt Ccy="EUR">11000.10</Amt>
                <CdtDbtInd>CRDT</CdtDbtInd>
                <Dt>
                    <Dt>2019-01-01</Dt>
                </Dt>
            </Bal>
            <Bal>
                <Tp>
                    <CdOrPrtry>
                        <Cd>CLBD</Cd>
                    </CdOrPrtry>
                </Tp>
                <Amt Ccy="EUR">1000.10</Amt>
                <CdtDbtInd>CRDT</CdtDbtInd>
                <Dt>
                    <Dt>2019-01-01</Dt>
                </Dt>
            </Bal>
            <TxsSummry>
                <TtlCdtNtries>
                    <NbOfNtries>2</NbOfNtries>
                    <Sum>11000.10</Sum>
                </TtlCdtNtries>
                <TtlDbtNtries>
                    <NbOfNtries>12</NbOfNtries>
                    <Sum>11111.11</Sum>
                </TtlDbtNtries>
            </TxsSummry>
            <Ntry>
                <Amt Ccy="EUR">11.11</Amt>
                <CdtDbtInd>CRDT</CdtDbtInd>
                <Sts>BOOK</Sts>
                <BookgDt>
                    <Dt>2019-01-01</Dt>
                </BookgDt>
                <ValDt>
                    <Dt>2019-01-01</Dt>
                </ValDt>
                <AcctSvcrRef>111111111111</AcctSvcrRef>
                <BkTxCd>
                    <Prtry>
                        <Cd>PP03</Cd>
                    </Prtry>
                </BkTxCd>
                <NtryDtls>
                    <TxDtls>
                        <Refs>
                            <InstrId>12345678901</InstrId>
                            <EndToEndId>NOTPROVIDED</EndToEndId>
                            <TxId>1234567890123456</TxId>
                        </Refs>
                        <RltdPties>
                            <Dbtr>
                                <Nm>DEBITOR NAME</Nm>
                                <PstlAdr>
                                    <Ctry>DE</Ctry>
                                </PstlAdr>
                            </Dbtr>
                            <DbtrAcct>
                                <Id>
                                    <IBAN>DE012345678901234</IBAN>
                                </Id>
                            </DbtrAcct>
                            <Cdtr>
                                <Nm>CREDITOR NAME</Nm>
                                <PstlAdr>
                                    <Ctry>DE</Ctry>
                                </PstlAdr>
                            </Cdtr>
                            <CdtrAcct>
                                <Id>
                                    <IBAN>DE098765432109874</IBAN>
                                </Id>
                            </CdtrAcct>
                        </RltdPties>
                        <RltdAgts>
                            <DbtrAgt>
                                <FinInstnId>
                                    <BIC>BICCODE</BIC>
                                </FinInstnId>
                            </DbtrAgt>
                            <CdtrAgt>
                                <FinInstnId>
                                    <BIC>BICCODE</BIC>
                                </FinInstnId>
                            </CdtrAgt>
                        </RltdAgts>
                        <Purp>
                            <Prtry>OTHR</Prtry>
                        </Purp>
                        <RmtInf>
                            <Ustrd>PAYMENT</Ustrd>
                        </RmtInf>
                    </TxDtls>
                </NtryDtls>
            </Ntry>
            <Ntry>
                <Amt Ccy="EUR">2000.20</Amt>
                <CdtDbtInd>DBIT</CdtDbtInd>
                <Sts>BOOK</Sts>
                <BookgDt>
                    <Dt>2019-01-02</Dt>
                </BookgDt>
                <ValDt>
                    <Dt>2019-01-02</Dt>
                </ValDt>
                <AcctSvcrRef>9876543210</AcctSvcrRef>
                <BkTxCd>
                    <Prtry>
                        <Cd>US03</Cd>
                    </Prtry>
                </BkTxCd>
                <NtryDtls>
                    <TxDtls>
                        <Refs>
                            <InstrId>987654321</InstrId>
                            <EndToEndId>DE987654</EndToEndId>
                            <TxId>898765432109876543210</TxId>
                        </Refs>
                        <RltdPties>
                            <Dbtr>
                                <Nm>DEBITOR NAME</Nm>
                                <PstlAdr>
                                    <Ctry>DE</Ctry>
                                </PstlAdr>
                            </Dbtr>
                            <DbtrAcct>
                                <Id>
                                    <IBAN>DE098765432109874</IBAN>
                                </Id>
                            </DbtrAcct>
                            <Cdtr>
                                <Nm>CREDITOR NAME</Nm>
                                <PstlAdr>
                                    <Ctry>DE</Ctry>
                                    <AdrLine>ADDRESS 3</AdrLine>
                                    <AdrLine>ADDRESS 4</AdrLine>
                                </PstlAdr>
                            </Cdtr>
                            <CdtrAcct>
                                <Id>
                                    <IBAN>DE12345678901234</IBAN>
                                </Id>
                            </CdtrAcct>
                        </RltdPties>
                        <RltdAgts>
                            <DbtrAgt>
                                <FinInstnId>
                                    <BIC>BICCODE</BIC>
                                </FinInstnId>
                            </DbtrAgt>
                            <CdtrAgt>
                                <FinInstnId>
                                    <BIC>BICCODE</BIC>
                                </FinInstnId>
                            </CdtrAgt>
                        </RltdAgts>
                        <Purp>
                            <Prtry>PRCP</Prtry>
                        </Purp>
                        <RmtInf>
                            <Strd>
                                <CdtrRefInf>
                                    <Tp>
                                        <CdOrPrtry>
                                            <Cd>SCOR</Cd>
                                        </CdOrPrtry>
                                    </Tp>
                                    <Ref>123446789</Ref>
                                </CdtrRefInf>
                                <AddtlRmtInf>PAYMENT INFO</AddtlRmtInf>
                            </Strd>
                        </RmtInf>
                    </TxDtls>
                </NtryDtls>
            </Ntry>
        </Stmt>
    </BkToCstmrStmt>
</Document>

使用RobertBaron的建议和以下代码,我能够从xml文件中获取一些信息。

If element.Name.LocalName.ToString() = "EndToEndId" Then
    My.Computer.FileSystem.WriteAllText("C:\cvs.csv", element.Value.ToString & ", ", True)
End If

在简单的xml文件中效果很好。

但是,如何找到更深嵌入节点结构中的数据?

例如,我将如何:

隐藏在结构内部的凭据银行帐号(iban):

<Document xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:iso:std:iso:20022:tech:xsd:camt.053.001.02">
    <BkToCstmrStmt>
        <Stmt>
            <Ntry>
                <NtryDtls>
                    <TxDtls>
                        <CdtrAcct>
                            <Id>
                                <IBAN>


感谢您的输入!

1 个答案:

答案 0 :(得分:0)

这会让您入门。将XML文件加载到内存中,然后使用LINQ选择所需的节点。

Imports System.Xml
Imports System.Xml.Linq

Module Module1

    Sub Main()

        Dim doc As XDocument = XDocument.Load("test.xml")
        Dim elements As IEnumerable(Of XElement)

        ' Select all nodes in the XML file.
        elements = doc.Descendants()

        ' Select only leaf nodes.
        elements = doc.Descendants.Where(Function(element) element.HasElements = False)

        ' etc...

        ' Loop through selected nodes, and write to .csv the values you want.
        For Each element As XElement In elements
            Debug.WriteLine(element.Name.LocalName + ": " + If(element.Value = Nothing, "", element.Value))
        Next

    End Sub

End Module