ich bin neu hier, ein echter Python-Frischling und hätte eine Frage zu xml-parsing mit ElementTree.
Die xml-Datei ist folgendermaßen aufgebaut (Ausschnitt, es gibt dutzende <A>'s...):
Code: Alles auswählen
<Beispiel_A>
<A>
<A1>Langbezeichnung der Funktion XYZ</A1>
<A2>Kurzbezeichnung der Funktion XYZ</A2>
<A3>1</A3>
<A4>0</A4>
<A5></A5>
<A6></A6>
<A7></A7>
<A8>1</A8>
<A9>1</A9>
<A10></A10>
<A11>2</A11>
<A12>2</A12>
<A13>2</A13>
<A14>
<A14.1>Modulblock RST.XYZ</A14.1>
<A14.2>SW-VERSION Modulblock RST</A14.2>
<A14.3>NOT-EXISTING</A14.3>
<A14.4></A14.4>
</A14>
<A15>[0]- 1</A15>
<A16>1</A16>
<A17>
<A17.1>Wert 1</A17.1>
<A17.1>Wert 2</A17.1>
</A17>
<A18>
<A18.1>50</A18.1>
<A18.1>160</A18.1>
</A18>
</A>
<A>
.
.
</A>
<A>
.
.
</A>
</Beispiel_A>
Die Fertige Tabelle sollte folgendermaßen aussehen:
A (1)| A1 | A2 | A17.1 (1. Wertepaar, hier Wert_1) | A18.1 (1. Wertepaar, hier 50)
A (1)| A1 | A2 | A17.1 (1. Wertepaar, hier Wert_2) | A18.1 (1. Wertepaar, hier 160)
A(2)
A(3)
.
.
A(n)
Mein Python-Code sieht wie folgt aus:
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import xml.etree.ElementTree as ET
import xlsxwriter
time = '{0:%Y-%m-%d %H:%M:%S}'.format(datetime.datetime.now())
time_file ='{0:%Y-%m-%d}'.format(datetime.datetime.now())
root = tk.Tk()
root.withdraw()
file_path = filedialog.askopenfilename(title='XML-Reader', filetypes=[(".xml-Datei", "*.xml")]) #Öffnet den File-Dialog um Dateien auswählen zu können
tree = ET.parse(file_path)
root = tree.getroot()
save_file = filedialog.asksaveasfilename(initialfile=(time_file+'_XML-Reader.xlsx'),title='XML-Reader',filetypes=[('Excel-Datei','*.xlsx')], defaultextension = '.xlsx')
worksheet2 = workbook.add_worksheet('Daten')
cell1 = workbook.add_format({'bold': True, 'font_color': 'blue',
'bg_color': '#E0E0E0'})
worksheet1.write(0, 0, 'Langname',cell1)
worksheet1.write(0, 1, 'Kurzname',cell1)
worksheet1.write(0, 2, 'Variablen',cell1)
worksheet1.write(0, 3, 'Werte',cell1)
worksheet1.autofilter('A1:D1')
def sheet_data():
row = 1
for dfc in root.getiterator('A'):
try:
a=dfc.find('A1').text
worksheet1.write(row, 0, a)
except AttributeError: a = ('---')
try:
b=dfc.find('A2').text
worksheet1.write(row, 1, b)
except AttributeError: b = ('---')
try:
c=dfc.find('A17/A17.1').text
worksheet1.write(row, 2, c)
except AttributeError: c = ('---')
try:
d=dfc.find('A18/A18.1').text
worksheet1.write(row, 3, d)
except AttributeError: d = ('---')
row = row+1
sheet_data()
workbook.close()
os.startfile(save_file)
Gruß mp123