Jump to content
  • 0

XSL voor camt.053


Meeuwis

Question

Goedemiddag,

Ik probeer een een xsl-sheet te schrijven voor het importen van bankafschrift. Dit afschrift is geschreven in een camt.053 (xml) extensie.
Maar wat ik ook probeer, het lukt me niet om uit dit simpele XML-bestandje zelfs maar de basis-gegevens in een fm-tabel te importeren.
Weet iemand waar de fout zit in mijn xsl-sheet?

Alvast bedankt,
Meeuwis

De XML-file ziet er al volgt uit:

<Document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="urn:iso:std:iso:20022:tech:xsd:camt.053.001.02" xsi:schemaLocation="urn:iso:std:iso:20022:tech:xsd:camt.053.001.02 camt.053.001.02.xsd">
  <BkToCstmrStmt>
    <GrpHdr>
      <MsgId>201804230000000_20180423103000259</MsgId>
      <CreDtTm>2018-04-23T10:30:00.259+02:00</CreDtTm>
    </GrpHdr>
    (...)
  </BkToCstmrStmt>
</Document>
 
Met de volgende XSL-sheet probeer ik de gegevens in te importen:
 
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:ing ="urn:iso:std:iso:20022:tech:xsd:camt.053.001.02">
     <xsl:template match="/">
        <FMPXMLRESULT xmlns="http://www.filemaker.com/fmpxmlresult">
            <ERRORCODE>0</ERRORCODE>
            <PRODUCT BUILD="" NAME="" VERSION=""/>
            <DATABASE DATEFORMAT="DD-MM-YYYY" LAYOUT="" NAME="" RECORDS="" TIMEFORMAT=""/>
            <METADATA>
                <FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="ingID" TYPE="TEXT"/>
                <FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="dateAndTimestamp" TYPE="TEXT"/>
            </METADATA>
            <RESULTSET>
                <xsl:attribute name="FOUND"/>
                <xsl:for-each select="ing:BkToCstmrStmt/GrpHdr">
                    <ROW MODID="0">
                        <xsl:attribute name="RECORDID"><xsl:value-of select="position()"/></xsl:attribute>
                        <COL>
                            <DATA>
                                <xsl:value-of select="MsgId"/>
                            </DATA>
                        </COL>
                        <COL>
                            <DATA>
                                <xsl:value-of select="CreDtTm"/>
                            </DATA>
                        </COL>
                    </ROW>
                </xsl:for-each>
            </RESULTSET>
        </FMPXMLRESULT>
    </xsl:template>
</xsl:stylesheet>
Link to post

7 answers to this question

Recommended Posts

  • 0

Volgend mij moet officieel elk XML document met een <xml tag beginnen. Dit document begint met <document tag. 

 

Ik denk dat dit op XML lijkt maar geen is. Mss Sovjet voldoende om “document” door “xml” te vervangen. Zowel aan het begin als aan het eind

Edited by andries
Link to post
  • 0

Ik denk dat je de namespace ing (je hebt hem zelf gedeclareerd) overal in je pad moet opnemen. Dus:

ing:BkToCstmrStmt/GrpHdr

moet worden:

ing:BkToCstmrStmt/ing:GrpHdr

en dat geldt ook voor de elementen van die node die je uitvraagt.

Ik heb niks getest, maar daar zou ik het probleem zoeken

Link to post
  • 0

Ik ben wel geïnteresseerd in de resultaten hiervan.

Is er niet een algemeen toepasbare XSLT van die camt.053 voor FileMaker? Dus een XSLT waar je alleen je eigen veldnamen moet invullen?

Ik ben zelf ook bezig geweest met bankafschriften maar dan via een $variabele waarin de XML wordt ingelezen. Vervolgens met een script en custom functie de verschillende transacties parsen. Voor grote bestanden is het alleen niet snel.

Link to post
  • 0

Dan zal je de xslt zelf moeten uitbreiden met datgene wat je nodig hebt. Kijk even in dit document: https://www.betaalvereniging.nl/wp-content/uploads/IG-Bank-to-Customer-Statement-CAMT-053-v2.0.pdf en dan snap je wel waarom.

Verder vond ik een redelijk compleet voorbeeld van een camt.053 voorbeeldbestand op de site van de abnamro. Daar zitten 2 fouten in zodat het document net niet "well-formed" is (in de bijlage heb ik dat bestand even gecorrigeerd).

Er kan een groot verschil zitten tussen gewone overboekingen en automatische incasso's:

/Document/BkToCstmrStmt/Stmt/Ntry/Amt <!-- Bedrag van één gewone overboeking -->

en 

/Document/BkToCstmrStmt/Stmt/Ntry/NtryDtls/TxDtls[1..n]/AmtDtls/TxAmt <!-- Bedrag van een verzameling van automatische incasso's -->

Dus een goede xslt schrijven die met één of meer nodes binnen een element rekening houdt en zodoende een boeking uiteenrafelt kost ff een paar uurtjes werk, maar is zeker de moeite waard. Daarna hoef je meestal heel lang niks meer te doen. Als de xml ineens met extra informatie wordt geleverd of er vallen delen uit of elementen worden op andere plaatsten neergezet, maakt voor de xslt eigenlijk niks uit, zolang het pad maar blijft bestaan.

X-path doet eigenlijk precies wat jij wilt hebben: je vult een veldnaam cq pad naar een veld in ... 

Voorbeeld_camt053.xml.zip

Link to post
  • 0

Dank, Menno. Duidelijk, Camt.053 is inderdaad een product van de vooruitgang, en er zijn goede specificaties. 

Zag dat er ook eerder is gepost op dit forum over dit formaat. 

Als tussenoplossing bij gebrek aan live koppelingsmogelijkheden dit pad dan maar begaan.

 

Link to post

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...