Seite 1 von 1

xml konverter mit python

Verfasst: Donnerstag 28. April 2005, 09:02
von Calanetics
Hi,

ich muss einen Konverter basteln und zwar der aus einer Siron Beschreibung die XML Struktur erzeugt. Die DTD ist mir auch schon vorgegeben.

Praktisch sieht so die Siron BEschreibung aus:

Code: Alles auswählen

    04 NUMMER     FU     4.0;       97
*% Žnderungsnummer
    04 AEDATEN               ; NEU  101
*% Abschnitt A
       07 KDNGES               ; NEU  101
*% Kunden- und Objektnummer
          10 KDNGESR     C     12  ;      101
*% Redefinition Kunden- u. Objektnummer
          10 KDNR     C      8  ;      101
*% Kundennummer
          10 OBJNR     C      4  ;      109
*% Objektnummer
       07 SKZSTA     C      3  ;      113
*% Kundenstatus (Tabelle 0170)
       07 DATSTAT     C      8  ;      116
*% Datum der Vergabe des Kundenstatus
       07 KDNRALT     C     10  ;      124
*% Kundennummer aus TA (vor Umstellung TAR)
       07 KDNRAZU     C     10  ;      134
*% Kundennummer alt Zusatz
       07 SAMNRG               ; NEU  144
*% Sammler-Kunden- und Objektnummer
          10 SMKDNRG     C     12  ;      144
*% Redefinition Sammlernummer gesamt
Praktisch steht dort Feldname, C szeht für alhanumerisch die zahl danch ist die Länge des Feldes und nach dem Semikolon das ist die Position.

die xml Beschreibung dazu würde so aussehen:

Code: Alles auswählen

<FixedLength>
			<FixedColumn>
			<Name>NUMMER</Name>
			<Numeric/> 
			<FixedRange>
				<From>97</From>
				<Length>4</Length>
			</FixedRange>
			</FixedColumn>
			<FixedColumn>
			<Name>KDNGESR</Name>
			<AlphaNumeric/> 
			<FixedRange>
				<From>101</From>
				<Length>12</Length>
			</FixedRange>
			</FixedColumn>
Is das überhaupt mit Python zu realisieren?

MFG

Robert

Edit (Leonidas): Daten in Code Tags gesetzt.

Re: xml konverter mit python

Verfasst: Donnerstag 28. April 2005, 09:56
von joe
Hi!
Calanetics hat geschrieben: Is das überhaupt mit Python zu realisieren?
Kein problem, das ja reine string-verarbeitung. Wenn dein beispiel vollständig ist, sieht ja jedes FixedColumn-element so aus:

Code: Alles auswählen

fixedColumnTempl = """<FixedColumn>
<Name>%s</Name>
<%s/>
<FixedRange>
<From>%s</From>
<Length>%s</Length>
</FixedRange>
</FixedColumn>"""
Aus den daten der quellzeilen erzeugst du dann ein tupel, mitdem du dann das template füllst: fixcol = fixedColumnTempl % (name,type,From,length)

Den typ (numerisch, alphanumerisch) als elementname vorzusehen, halte ich allerdings für einen fehler. Besser wäre <type>numeric</type> oder als attribut: <Name type="alphanumeric">.
joe

Re: xml konverter mit python

Verfasst: Donnerstag 28. April 2005, 10:20
von joe
joe hat geschrieben:oder als attribut: <Name type="alphanumeric">.
joe
<FixedColumn type="alphanumeric">, wenn schon.
joe

mit xml eine Datei Beschreiben

Verfasst: Donnerstag 28. April 2005, 11:35
von Calanetics
Hi,

mhh also bisher hab ich mal die allgemine schritte so gemacht.

Code: Alles auswählen

#!/usr/bin/env python 
import string 



f =open ("C:/windows/temp/test.txt", 'r')   
ausgabe=open ("C:/windows/temp/test.xml", 'w')     
L =[] 
for line in f.readlines():  
    linearray = line.split(" ") 
    if linearray[3] == " FU " : 
        L = numeric 

ausgabe.writelines(hier die tupel?)
f.close()


So 100% bin ich noch nicht hintergestiegen.probiers schon viel rum. ich habe die Beschreibung die er einliiest. und eine Ausgabedatei in der der xml text generiert werden soll. jede zeile wird abgearbeitet und jedes Feld in der Zeile müßte doch erstmal ausgewertet werden ooder?

Ich würd mich freuen wenns sich jemand erbarmen könnt mir es noch nächer zu bringen:)

MFG

Robert

Re: mit xml eine Datei Beschreiben

Verfasst: Donnerstag 28. April 2005, 12:15
von joe
untested:

Code: Alles auswählen

f =open ("C:/windows/temp/test.txt", 'r')   
ausgabe=open ("C:/windows/temp/test.xml", 'w')     

fixedColumnTempl = """<FixedColumn>
<Name>%s</Name>
<%s/>
<FixedRange>
<From>%s</From>
<Length>%s</Length>
</FixedRange>
</FixedColumn>""" 

for line in f.readlines(): 
    if not ";" in line: continue # keine datenzeile
    line,From = line.split(";")
    line = line.strip()
    linearray = line.split(" ")
    Name = linearray[1]
    if len(linearray) > 2:
        if linearray[2] == " FU ":
            Type = "numeric"
        else  # dann kann es nur C sein
            Type = "alphanumeric"
        Length = linearray[3]
    else
        Type = ""
        Length = ""
    
    ausgabe.write(fixedColumnTempl % (Name,Type,From,Length))

ausgabe.close()
f.close()
joe

Verfasst: Donnerstag 28. April 2005, 14:40
von jens
Ich mache das ganze lieber so:

Code: Alles auswählen

fixedColumnTempl = """<FixedColumn>
<Name>%(name)s</Name>
<%(typ)s/>
<FixedRange>
<From>%(from)s</From>
<Length>%(length)s</Length>
</FixedRange>
</FixedColumn>"""

[...]

ausgabe.write( fixedColumnTempl % {
    "name": Name,
    "type": Type,
    "from": From,
    "length": Length
)
Da weiß man besser wo was hinkommt... Wenn man im Template die Positionen ändert, funktioniert es immernoch 8)