Seite 1 von 1
XML Konten Element verschieben
Verfasst: Samstag 14. Januar 2017, 14:37
von puwo1407
Hallo zusammen,
ich erhalte XML Dateien, welche ich automatisiert in mein ERP einlesen möchte.
Leider sind die Knotenpunkte innerhalb eines Files falsch angeordnet.
Originalfile:
<?XML Version="1.0" Encoding="ISO-8859-1"?>
<bestellung>
+ <produkte>
+ <bestellinfo>
</bestellung>
diese Reihenfolge würde ich brauchen
<?XML Version="1.0" Encoding="ISO-8859-1"?>
<bestellung>
+ <bestellinfo>
+ <produkte>
</bestellung>
Kann mir hier jemand helfen?
Danke liebes Team
puwo
Re: XML Konten Element verschieben
Verfasst: Samstag 14. Januar 2017, 14:48
von nezzcarth
Ich weiß, XSLT genießt einen zweifelhaften Ruf, aber das ließe sich damit sehr leicht bewerkstelligen -- ob nun aus Python heraus (mit lxml), oder mit einem externen Prozessor wie Saxon.
Re: XML Konten Element verschieben
Verfasst: Samstag 14. Januar 2017, 14:52
von pyHoax
Kann mir hier jemand helfen?
Mal schauen.
Dir liegt eine wrong_order.xml vor und möchtst diese in correct_order.xml umwandeln ?
ICh glaub ich kann mich erinnern, das erzwingen einen Reihenfolge der childs eines parents ist etwas tricky.
Wenn du die schema datei hast?
Und ein Besipiel xml wäre nicht schlecht.
Re: XML Konten Element verschieben
Verfasst: Samstag 14. Januar 2017, 14:56
von Sirius3
@puwo1407: das geht mit ElementTree sehr einfach. Z.B. »tree.find('.//bestellung').getchildren().reverse()«
Re: XML Konten Element verschieben
Verfasst: Samstag 14. Januar 2017, 17:24
von puwo1407
Ich habe erst gestern mit python begonnen, hab mir auch ein Buch bestellt
Habe Windows10 und verwende 3.6
Aus irgendeinem Grund funktioniert auch die IntelliSense nicht wirklich....
Habs mal so probiert, funktioniert natürlich NICHT....
Code: Alles auswählen
# Import the os module, for the os.walk function
import os
import xml.etree.ElementTree as ET
from collections import namedtuple
# Set the directory you want to start from
rootDir = '.'
for dirName, subdirList, fileList in os.walk(rootDir):
#print('Found directory: %s' % dirName)
for fname in fileList:
#print('\t%s' % fname)
tree = ET.parse(fname)
root = tree.getroot()
tree.find(".//bestellung").getchildren().reverse()
tree.write(fname + 'output.xml')
lg
Re: XML Konten Element verschieben
Verfasst: Sonntag 15. Januar 2017, 15:22
von Sirius3
@puwo1407: was heißt »funktioniert NICHT«? Python liefert einem einen ausführlichen Traceback, an dem man genau erkennen kann, was nicht funktioniert. So kann man jetzt viele Fehlerursachen raten: die Datei existiert nicht, weil sie in einem Unterverzeichnis liegt, die Datei ist keine XML-Datei, weil Du ja alle Dateien durchgehst. Das gesuchte Tag ist das root-Tag, so dass man »find« weglassen kann und direkt »root.getchildren().reverse()« schreiben kann. Oder irgendein anderer Fehler; mit einem frustrierten »funktioniert natürlich NICHT« ist die Fehlersuche aber natürlich frustrierend.