ciddy77: XML wandeln in ASCII

Hi,

zuerst mal, ich bin absoluter Laie auf diesem Gebiet. Zum Thema: Für meine Buchhaltung brauche ich ASCII Dateien, um Sie in meine Software zu importieren. Allerdings funktioniert der Export aus dem Verwaltungsprogramm nur als XML. Kann mir da jemand weiterhelfen? Vielleicht ist es ja leichter, als ich mir das gerade vorstelle.

Danke und beste Grüße,
ciddy

  1. Hallo ciddy77,

    Allerdings funktioniert der Export aus dem Verwaltungsprogramm nur als XML.

    Bei Kenntnis der XML-Struktur und des auszugebenden Textformats (z. B. CSV) lässt sich eine entsprechende XSL-Transformation aufsetzen (Basis <xsl:output method="text"/>).

    Grüße,
    Thomas

    1. Hi Thomas,

      erstmal danke für Deine Antwort. Leider versteh ich nur Bahnhof. Es geht um GS-Auftrag. Da kann ich als .xml exportieren. Meine Buchhalterin sagt aber Sie braucht ASCII für den Import. Was kann ich tun?

      Grüße, ciddy

      1. Hallo ciddy77,

        Es geht um GS-Auftrag. Da kann ich als .xml exportieren. Meine Buchhalterin sagt aber Sie braucht ASCII für den Import. Was kann ich tun?

        Zeige mal ein relevantes Stück des exportierten XML-Codes und die Entsprechung in der Textvariante. Dann kann ich daran das formale Prinzip der Transformation näher erläutern.

        Grüße,
        Thomas

        1. <?xml version="1.0" encoding="ISO-8859-1" standalone="yes" ?>

          • <!--  Source: GS-Exportmodul (c) sage Software, Info http://www.gsn.de   -->
          • <DATAPACKET Version="2.0">
          • <METADATA>
          • <FIELDS>
          • <!--  Definitionen der exportierten Felder   -->   <FIELD attrname="AUFTRAGSSTATUS" fieldtype="string" WIDTH="6" />   <FIELD attrname="AUFTRAGSART" fieldtype="string" WIDTH="4" />   <FIELD attrname="EUROBETRAG" fieldtype="string" WIDTH="20" />   <FIELD attrname="NUMMER" fieldtype="i4" />   <FIELD attrname="MARKIERT" fieldtype="boolean" />   <FIELD attrname="ALTNUMMER" fieldtype="i4" />   <FIELD attrname="SCHRIFTNR" fieldtype="i4" />   <FIELD attrname="ERFART" fieldtype="string" WIDTH="4" />   <FIELD attrname="ALTERFART" fieldtype="string" WIDTH="4" />   <FIELD attrname="OPNUMMER" fieldtype="i4" />   <FIELD attrname="USER" fieldtype="string" WIDTH="8" />   <FIELD attrname="GEBUCHT" fieldtype="boolean" />   <FIELD attrname="GEDRUCKT" fieldtype="boolean" />   <FIELD attrname="AUFTRAGOK" fieldtype="boolean" />   <FIELD attrname="FORTGEFUEHRT" fieldtype="boolean" />   <FIELD attrname="RESTOK" fieldtype="boolean" />   <FIELD attrname="GEMAILT" fieldtype="boolean" />   <FIELD attrname="DATUM" fieldtype="date" />   <FIELD attrname="AUFNR" fieldtype="string" WIDTH="25" />   <FIELD attrname="ALTAUFNR" fieldtype="string" WIDTH="25" />   <FIELD attrname="AUFBEZ" fieldtype="string" WIDTH="40" />   <FIELD attrname="ADRINR" fieldtype="i4" />   <FIELD attrname="LIEFERINR" fieldtype="i4" />   <FIELD attrname="ENDPRB" fieldtype="r8" />   <FIELD attrname="ENDPRN" fieldtype="r8" />   <FIELD attrname="PRBRUTTO" fieldtype="boolean" />   <FIELD attrname="GUTSUMME" fieldtype="r8" />   <FIELD attrname="BEZSUMME" fieldtype="r8" />   <FIELD attrname="LTERMIN" fieldtype="string" WIDTH="20" />   <FIELD attrname="SKONTO1" fieldtype="r8" />   <FIELD attrname="SKTAGE1" fieldtype="r8" />   <FIELD attrname="SKONTO2" fieldtype="r8" />   <FIELD attrname="SKTAGE2" fieldtype="r8" />   <FIELD attrname="TAGNETTO" fieldtype="r8" />   <FIELD attrname="VERSART" fieldtype="string" WIDTH="30" />   <FIELD attrname="ZAHLART" fieldtype="string" WIDTH="30" />   <FIELD attrname="GESRAB" fieldtype="r8" />   <FIELD attrname="GESRABTYPE" fieldtype="i4" />   <FIELD attrname="PREISGR" fieldtype="r8" />   <FIELD attrname="RABATTGR" fieldtype="r8" />   <FIELD attrname="AUSLAND" fieldtype="boolean" />   <FIELD attrname="EGAUSLAND" fieldtype="boolean" />   <FIELD attrname="FLDC01" fieldtype="string" WIDTH="25" />   <FIELD attrname="FLDC02" fieldtype="string" WIDTH="25" />   <FIELD attrname="FLDC03" fieldtype="string" WIDTH="25" />   <FIELD attrname="FLDC04" fieldtype="string" WIDTH="25" />   <FIELD attrname="FLDN01" fieldtype="r8" />   <FIELD attrname="FLDN02" fieldtype="r8" />   <FIELD attrname="FLDN03" fieldtype="r8" />   <FIELD attrname="FLDN04" fieldtype="r8" />   <FIELD attrname="INKOPF" fieldtype="string" WIDTH="4096" />   <FIELD attrname="INFUSS" fieldtype="string" WIDTH="4096" />   <FIELD attrname="BEMERKUNG" fieldtype="string" WIDTH="4096" />   <FIELD attrname="KENNUNG1" fieldtype="string" WIDTH="20" />   <FIELD attrname="KENNUNG2" fieldtype="string" WIDTH="20" />   <FIELD attrname="MKZ" fieldtype="i4" />   <FIELD attrname="MAHNDATUM" fieldtype="date" />   <FIELD attrname="ANZAHLUNG" fieldtype="r8" />   <FIELD attrname="MAHNFRIST" fieldtype="date" />   <FIELD attrname="EARBELEG" fieldtype="string" WIDTH="20" />   <FIELD attrname="FIBUBELEG" fieldtype="string" WIDTH="20" />   <FIELD attrname="MAHNGEB" fieldtype="r8" />   <FIELD attrname="EURO" fieldtype="boolean" />   <FIELD attrname="AUSSHOP" fieldtype="boolean" />   <FIELD attrname="PKWNUMMER" fieldtype="i4" />   <FIELD attrname="IVERTNR" fieldtype="i4" />   <FIELD attrname="VERTRETER" fieldtype="string" WIDTH="30" />   <FIELD attrname="KUNDGR" fieldtype="string" WIDTH="20" />   <FIELD attrname="KAKENNNR" fieldtype="i4" />   <FIELD attrname="KBKENNNR" fieldtype="i4" />   <FIELD attrname="KAKENN" fieldtype="string" WIDTH="6" />   <FIELD attrname="KBKENN" fieldtype="string" WIDTH="6" />   <FIELD attrname="LMAHNGEB" fieldtype="r8" />   <FIELD attrname="AUSKASSE" fieldtype="boolean" />   <FIELD attrname="ONLINEID" fieldtype="i4" />   <FIELD attrname="WIEDERVORLAGE" fieldtype="string" WIDTH="30" />   <FIELD attrname="VORLAGEENDE" fieldtype="date" />   <FIELD attrname="VORLAGEERLEDIGT" fieldtype="boolean" />   <FIELD attrname="KARTE" fieldtype="string" WIDTH="20" />   <FIELD attrname="TRACENR" fieldtype="string" WIDTH="20" />   <FIELD attrname="STORNIERT" fieldtype="boolean" />   <FIELD attrname="EGIDENTNR" fieldtype="string" WIDTH="15" />   <FIELD attrname="SKONTOBETRAG" fieldtype="r8" />   <FIELD attrname="INKASSOAUFTRAG" fieldtype="boolean" />   <FIELD attrname="RADRINR" fieldtype="r8" />   <FIELD attrname="LETZTERUSER" fieldtype="string" WIDTH="30" />   <FIELD attrname="LETZTERUSERDATE" fieldtype="datetime" />   <FIELD attrname="IMPORTIERT" fieldtype="boolean" />   <FIELD attrname="ERINNERUNG" fieldtype="date" />   <FIELD attrname="ERINNERT" fieldtype="boolean" />   <FIELD attrname="GUTSCHRIFTZAHLUNG" fieldtype="r8" />   <FIELD attrname="NAME" fieldtype="string" WIDTH="60" />   <FIELD attrname="GELDKONTO" fieldtype="string" WIDTH="4" />   <FIELD attrname="GESGEWICHT" fieldtype="r8" />   <FIELD attrname="NEUGU" fieldtype="boolean" />   <FIELD attrname="TERMINAL" fieldtype="string" WIDTH="30" />   <FIELD attrname="OBESTID" fieldtype="i4" />   <FIELD attrname="VERSANDCODE" fieldtype="string" WIDTH="30" />   <FIELD attrname="TERMINVERGEBEN" fieldtype="boolean" />   <FIELD attrname="P13B" fieldtype="boolean" />   <FIELD attrname="AKTIONSVORGANG" fieldtype="boolean" />   <FIELD attrname="RMNEU" fieldtype="boolean" />   <FIELD attrname="GESPEICHERT" fieldtype="boolean" />   <FIELD attrname="UHRZEIT" fieldtype="time" />   <FIELD attrname="ERNUMMER" fieldtype="string" WIDTH="30" />   <FIELD attrname="KUNDEBEZEICHNUNG" fieldtype="string" WIDTH="80" />   <FIELD attrname="KONTONUMMER" fieldtype="string" WIDTH="40" />   <FIELD attrname="KMATCH" fieldtype="string" WIDTH="80" />   <FIELD attrname="KANREDE" fieldtype="string" WIDTH="80" />   <FIELD attrname="KNAME" fieldtype="string" WIDTH="80" />   <FIELD attrname="KVORNAME" fieldtype="string" WIDTH="80" />   <FIELD attrname="KSTRASSE" fieldtype="string" WIDTH="80" />   <FIELD attrname="KPLZ" fieldtype="string" WIDTH="80" />   <FIELD attrname="KORT" fieldtype="string" WIDTH="80" />   <FIELD attrname="KTELEFON" fieldtype="string" WIDTH="80" />   <FIELD attrname="KFAX" fieldtype="string" WIDTH="80" />   </FIELDS>   </METADATA>
          • <!--  Objekt ROWDATA enthaelt pro Datensatz ein ROW-Objekt mit den oben definierten Feldern   -->
          • <ROWDATA>   <ROW AUFTRAGSSTATUS="OK" AUFTRAGSART="RE" EUROBETRAG="113,82" NUMMER="5762" MARKIERT="" ALTNUMMER="" SCHRIFTNR="5952" ERFART="04RE" ALTERFART="" OPNUMMER="10006692" USER="" GEBUCHT="Wahr" GEDRUCKT="Wahr" AUFTRAGOK="Wahr" FORTGEFUEHRT="" RESTOK="Wahr" GEMAILT="Falsch" DATUM="14.03.2008" AUFNR="2008-0206" ALTAUFNR="" AUFBEZ="" ADRINR="2505" LIEFERINR="" ENDPRB="113,82" ENDPRN="106,38" PRBRUTTO="Falsch" GUTSUMME="0" BEZSUMME="113,82" LTERMIN="14.03.2008" SKONTO1="0" SKTAGE1="10" SKONTO2="0" SKTAGE2="0" TAGNETTO="10" VERSART="Paketdienst" ZAHLART="Rechnung" GESRAB="0" GESRABTYPE="0" PREISGR="3" RABATTGR="0" AUSLAND="Falsch" EGAUSLAND="Falsch" FLDC01="" FLDC02="" FLDC03="" FLDC04="" FLDN01="4,95" FLDN02="0" FLDN03="0" FLDN04="0" INKOPF="" INFUSS="" BEMERKUNG="" KENNUNG1="" KENNUNG2="" MKZ="" MAHNDATUM="" ANZAHLUNG="" MAHNFRIST="" EARBELEG="" FIBUBELEG="AR00208/08" MAHNGEB="" EURO="Wahr" AUSSHOP="" PKWNUMMER="-1" IVERTNR="0" VERTRETER="" KUNDGR="Vertrieb" KAKENNNR="" KBKENNNR="" KAKENN="" KBKENN="" LMAHNGEB="" AUSKASSE="" ONLINEID="" WIEDERVORLAGE="" VORLAGEENDE="" VORLAGEERLEDIGT="" KARTE="" TRACENR="" STORNIERT="" EGIDENTNR="" SKONTOBETRAG="0" INKASSOAUFTRAG="" RADRINR="" LETZTERUSER="" LETZTERUSERDATE="" IMPORTIERT="" ERINNERUNG="" ERINNERT="" GUTSCHRIFTZAHLUNG="" NAME="Pro-Ver-Di" GELDKONTO="" GESGEWICHT="0" NEUGU="" TERMINAL="" OBESTID="" VERSANDCODE="" TERMINVERGEBEN="" P13B="Falsch" AKTIONSVORGANG="" RMNEU="Wahr" GESPEICHERT="" UHRZEIT="09:08:11" ERNUMMER="" KUNDEBEZEICHNUNG="Pro-Ver-Di - Berlin" KONTONUMMER="12578" KMATCH="Pro-Ver-Di" KANREDE="" KNAME="Müller" KVORNAME="" KSTRASSE="xxx-Platz 3" KPLZ="10xxx" KORT="Berlin" KTELEFON="" KFAX="" />   </ROWDATA>   </DATAPACKET>
          1. Hallo ciddy77,

            • <FIELDS>
            • <!--  Definitionen der exportierten Felder
                -->
                <FIELD attrname="AUFTRAGSSTATUS" fieldtype="string" WIDTH="6" />
                ...

            Vermutlich sollen die FIELD-Namen die Spalten bilden und die Attribute der ROW-Elemente die einzelnen Daten. Dann passt formal diese Transformation:

            <?xml version="1.0" encoding="ISO-8859-1"?>  
            <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">  
              
              <xsl:output method="text" encoding="ISO-8859-1"/>  
              
              <xsl:template match="DATAPACKET">  
              
              <xsl:for-each select="METADATA/FIELDS/FIELD">  
                <xsl:value-of select="@attrname"/>  
                <xsl:choose>  
                  <xsl:when test="position()!=last()">  
                    <xsl:text>;</xsl:text>  
                  </xsl:when>  
                  <xsl:otherwise>  
                    <xsl:text>&#xA;</xsl:text>  
                  </xsl:otherwise>  
                </xsl:choose>  
              </xsl:for-each>  
              
              <xsl:for-each select="ROWDATA/ROW/@*">  
                <xsl:value-of select="."/>  
                <xsl:choose>  
                  <xsl:when test="position()!=last()">  
                    <xsl:text>;</xsl:text>  
                  </xsl:when>  
                  <xsl:otherwise>  
                    <xsl:text>&#xA;</xsl:text>  
                  </xsl:otherwise>  
                </xsl:choose>  
              </xsl:for-each>  
              
              </xsl:template>  
              
            </xsl:stylesheet>
            

            mit dem Ergebnis:

            AUFTRAGSSTATUS;AUFTRAGSART;EUROBETRAG;...
            OK;RE;113,82;...

            Zur Umsetzung bieteten sich XSLT-Prozessoren wie u. a. Saxon oder AltovaXML an.

            Grüße,
            Thomas

            1. Und mit den Programmen könnte in in ASCII konvertieren?

              1. Hallo ciddy77,

                Und mit den Programmen könnte in in ASCII konvertieren?

                Mit diesen Tools lassen sich XML-Dokumente auf der Basis von XSLT-Stylesheets in die gewünschten Ausgaben umformen (transformieren). Der Aufruf erfolgt üblicherweise über eine Konsole, z. B. Saxon als Java-Anwendung:

                java -jar x:\pfad\zu\saxon\saxon9.jar -s:name.xml -xsl:name.xsl -o:name.out

                -s   = source (das XML-Dokument als Quelle)
                -xsl = XSLT-Stylesheet
                -o   = output (die Zieldatei)

                Grüße,
                Thomas

            2. [Nachtrag:]

              <xsl:for-each select="ROWDATA/ROW/@*">
                  <xsl:value-of select="."/>
                  xsl:choose
                    <xsl:when test="position()!=last()">
                      xsl:text;</xsl:text>
                    </xsl:when>
                    xsl:otherwise
                      xsl:text&#xA;</xsl:text>
                    </xsl:otherwise>
                  </xsl:choose>
                </xsl:for-each>

              Ich hatte es nur mit dem einen gegebenen Datensatz probiert, bei mehreren ist noch etwas Feintuning nötig:

              ~~~xml <xsl:for-each select="ROWDATA">
                     <xsl:for-each select="ROW/@*">
                       <xsl:value-of select="."/>
                       xsl:choose
                         <xsl:when test="position()!=last()">
                           xsl:text;</xsl:text>
                         </xsl:when>
                         xsl:otherwise
                           xsl:text&#xA;</xsl:text>
                         </xsl:otherwise>
                       </xsl:choose>
                     </xsl:for-each>
                   </xsl:for-each>

                
              Grüße,  
              Thomas