Ga naar inhoud
  • 0

XSL voor camt.053


Meeuwis

Vraag

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 naar reactie

7 antwoorden op deze vraag

Aanbevolen berichten

  • 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

aangepast door andries
Link naar reactie
  • 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 naar reactie
  • 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 naar reactie
  • 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 naar reactie

Doe mee aan dit gesprek

Je kunt dit nu plaatsen en later registreren. Indien je reeds een account hebt, log dan nu in om het bericht te plaatsen met je account.

Gast
Beantwoord deze vraag...

×   Geplakt als verrijkte tekst.   Plak in plaats daarvan als platte tekst

  Er zijn maximaal 75 emoji toegestaan.

×   Je link werd automatisch ingevoegd.   Tonen als normale link

×   Je vorige inhoud werd hersteld.   Leeg de tekstverwerker

×   Je kunt afbeeldingen niet direct plakken. Upload of voeg afbeeldingen vanaf een URL in

×
×
  • Nieuwe aanmaken...