Announcement

Collapse
No announcement yet.

Auslesen einer XML Datei...

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Auslesen einer XML Datei...

    Guten Tag,

    ich habe ein Problem, welches ich bis jetzt nicht lösen konnte. Ich muss eine XML Datei (SEPA) mit dem nachstehenden Aufbau einlesen. Mein Problem ist, dass ich den Node "Document" nicht ansprechen kann da, dieser eine Zuweisung einer XSD hat und demnach (scheinbar) ein eigenes Dokument in einem Dokument darstellt. Nach den öffentlichen Datei - Spezifikationen handelt es sich dabei um eine "Container" Datei, die verschiedene Dateien aufnehmen kann.

    Kann mir jemand den Umgang mit solchen XML Datei erklären? Im Netz habe ich nichts gefunden was ich verstanden habe...

    Ich bedanke mich schon jetzt vielen Male!!!!

    Olaf


    Code:
    <?xml version="1.0" encoding="UTF-8"?>
    <conxml xmlns="urn:conxml:xsd:container.nnn.002" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:conxml:xsd:container.nnn.002 container.nnn.002.xsd">
      <CreDtTm>2010-10-26T14:48:17Z</CreDtTm>
      <MsgPain008>
        <HashValue>7DDB2138E8C91037DA7A6E9552478C59A2AACE26F8112EBC8012A8DE11592025</HashValue>
        <HashAlgorithm>SHA256</HashAlgorithm>
        <Document xmlns="urn:swift:xsd:$pain.008.002.01">
          <pain.008.001.01>
            <GrpHdr>
              <MsgId>D004201010261648081</MsgId>
              <CreDtTm>2010-10-26T14:48:08Z</CreDtTm>
              <NbOfTxs>1</NbOfTxs>
              <CtrlSum>0.20</CtrlSum>
              <Grpg>MIXD</Grpg>
              <InitgPty>
                <Nm>Testauftraggeber SEPA-LS</Nm>
              </InitgPty>
            </GrpHdr>
            <PmtInf>
              <PmtInfId>D00420101024444444081</PmtInfId>
              <PmtMtd>DD</PmtMtd>
              <PmtTpInf>
                <SvcLvl>
                  <Cd>SEPA</Cd>
                </SvcLvl>
                <LclInstrm>
                  <Cd>CORE</Cd>
                </LclInstrm>
                <SeqTp>OOFF</SeqTp>
              </PmtTpInf>
              <ReqdColltnDt>2010-11-02</ReqdColltnDt>
              <Cdtr>
                <Nm>Testauftraggeber SEPA-LS</Nm>
              </Cdtr>
              <CdtrAcct>
                <Id>
                  <IBAN>DE352505018444402014</IBAN>
                </Id>
              </CdtrAcct>
              <CdtrAgt>
                <FinInstnId>
                  <BIC>SPKHDE2HXXX</BIC>
                </FinInstnId>
              </CdtrAgt>
              <ChrgBr>SLEV</ChrgBr>
              <DrctDbtTxInf>
                <PmtId>
                  <EndToEndId>Lastschriftreferenz 002</EndToEndId>
                </PmtId>
                <InstdAmt Ccy="EUR">0.20</InstdAmt>
                <DrctDbtTx>
                  <MndtRltdInf>
                    <MndtId>Mandat002</MndtId>
                    <DtOfSgntr>2010-10-26</DtOfSgntr>
                    <AmdmntInd>false</AmdmntInd>
                  </MndtRltdInf>
                  <CdtrSchmeId>
                    <Id>
                      <PrvtId>
                        <OthrId>
                          <Id>DE98ZZZ09999999999</Id>
                          <IdTp>SEPA</IdTp>
                        </OthrId>
                      </PrvtId>
                    </Id>
                  </CdtrSchmeId>
                </DrctDbtTx>
                <DbtrAgt>
                  <FinInstnId>
                    <BIC>SPKHDE2HXXX</BIC>
                  </FinInstnId>
                </DbtrAgt>
                <Dbtr>
                  <Nm>Test Zahlungspflichtiger</Nm>
                </Dbtr>
                <DbtrAcct>
                  <Id>
                    <IBAN>DE132505018005555552</IBAN>
                  </Id>
                </DbtrAcct>
                <UltmtDbtr>
                  <Nm>Test Miete</Nm>
                </UltmtDbtr>
                <RmtInf>
                  <Ustrd>Test SEPA-LS Einzug durch 10002014 Zahlungspflichtiger 10002022</Ustrd>
                </RmtInf>
              </DrctDbtTxInf>
            </PmtInf>
          </pain.008.001.01>
        </Document>
      </MsgPain008>
    </conxml>

  • #2
    Welchen XML-Parser und was für eine API benutzt du denn mit Delphi? In dem Dokument werden Namensräume verwendet, definiert in http://www.w3.org/TR/xml-names/. Mit Schemas hat das nicht notwendigerweise zu tun.

    Comment


    • #3
      Hallo,

      ohne zum konkreten Problem direkt etwas sagen zu können nur mal ein "Einwurf" wie ich ein ähnliches Problem gelöst habe.

      Das ist sicherlich nicht sehr elegant, aber für mich als XML-Neuling und etwas naja, konservativer Programmierer war das die schlüssigste Lösung.

      Ich habe mit zum XML Dokument eine passende Transformation gebastelt, die das XML in eine (für mich) einfachere Form wandelt. In Deinem Fall z.B. in ein 'flaches' Format wie z.B

      AUFTRAGGEBER=Testauftraggeber SEPA-LS
      IBAN=DE352505018444402014
      usw.

      Also eine Stringlist mit den relevanten Informationen. Diese hab' ich dann 'klassisch' weiterverarbeitet.

      Die Transformation selbst besorgt die Klasse TXMLDocument

      Das ist sicher ein Workaround, sauberer wäre z.B. ein richtiger XML - Dataset - Mapper, in den Enterprise Delphiversionen gibt es sowas wohl.

      Falls der Workound trotzdem interessiert, bitte nochmal nachfragen.

      Grüße
      Tino
      Ich habs gleich!
      ... sagte der Programmierer.

      Comment

      Working...
      X