使用VB.net读取.xml银行对账单中特定节点的值
我试图从xml银行对账单中提取数据,稍后将其转换为csv 我想知道债权人银行的号码,即:使用VB.net读取.xml银行对账单中特定节点的值,xml,vb.net,linq,Xml,Vb.net,Linq,我试图从xml银行对账单中提取数据,稍后将其转换为csv 我想知道债权人银行的号码,即: <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>
<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>
<RltdPties>
<CdtrAcct>
<Id>
<IBAN>DE1234567891012345</IBAN>
我有这个问题,因为它们不是同一个类,我不知道如何正确地声明它
Dim elements As IEnumerable(Of XElement)
Dim currentElement As XElement
element As XElement In elements
你能给我一些建议吗?如何纠正
Exsample 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>
MSGSTMT1234567890123457890
2019-02-13T17:17:18.2369252+01:00
SKBSTMT5/2019-EUR
20195
2019-01-01T00:00:00
DE012345678901234
公司名称
判定元件
地址1
地址2
二进制码
银行名称
判定元件
OPBD
11000.10
CRDT
2019-01-01
CLBD
1000.10
CRDT
2019-01-01
2.
11000.10
12
11111.11
11.11
CRDT
书
2019-01-01
2019-01-01
111111111111
PP03
12345678901
未提供
1234567890123456
借方名称
判定元件
DE012345678901234
债权人名称
判定元件
DE098765432109874
二进制码
二进制码
奥瑟
付款
2000.20
DBIT
书
2019-01-02
2019-01-02
9876543210
US03
987654321
DE987654
898765432109876543210
借方名称
判定元件
DE098765432109874
债权人名称
判定元件
地址3
地址4
DE1234567890134
二进制码
二进制码
PRCP
轻蔑
<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>
Imports System.Xml
Imports System.Xml.Linq
Imports System.IO
Module Module1
Const XML_FILENAME As String = "c:\temp\test.xml"
Const CSV_FILENAME As String = "c:\temp\test.csv"
Sub Main()
Dim csvWriter As New StreamWriter(CSV_FILENAME)
csvWriter.WriteLine(String.Join(",", {
"Amount",
"Currency",
"Debitor Name",
"Debitor Account",
"Creditor Name",
"Creditor Account"}))
Dim doc As XDocument = XDocument.Load(XML_FILENAME)
Dim document As XElement = doc.Root
Dim ns As XNamespace = document.GetDefaultNamespace()
For Each Ntry In doc.Descendants(ns + "Ntry")
Dim amt As XElement = Ntry.Element(ns + "Amt")
Dim currency As String = CType(amt.Attribute("Ccy"), String)
Dim amount As Decimal = CType(amt, Decimal)
Dim Dbtr As XElement = Ntry.Descendants(ns + "Dbtr").FirstOrDefault()
Dim debitorName As String = CType(Dbtr.Element(ns + "Nm"), String)
Dim DbtrAcct As XElement = Ntry.Descendants(ns + "DbtrAcct").FirstOrDefault()
Dim DbtrIBAN As String = CType(DbtrAcct.Descendants(ns + "IBAN").FirstOrDefault(), String)
Dim Cdtr As XElement = Ntry.Descendants(ns + "Cdtr").FirstOrDefault()
Dim creditorName As String = CType(Cdtr.Element(ns + "Nm"), String)
Dim CdtrAcct As XElement = Ntry.Descendants(ns + "CdtrAcct").FirstOrDefault()
Dim CdtrIBAN As String = CType(CdtrAcct.Descendants(ns + "IBAN").FirstOrDefault(), String)
csvWriter.WriteLine(String.Join(",", {
amount.ToString(),
currency,
debitorName,
DbtrIBAN,
creditorName,
CdtrIBAN}))
Next Ntry
csvWriter.Flush()
csvWriter.Close()
End Sub
End Module