Xml Import
Zuletzt geändert: 14.03.2026 15:10

XML-Import und -Export (Python) #

Python-Beispiele für den XML-Import und -Export mit EULANDA. Die vollständige Objektreferenz finden Sie unter XMLLIB-Objekt.

Alle Beispiele auf dieser Seite verwenden import win32com.client und setzen das Paket pywin32 voraus. Installation und Einrichtung sind unter Python beschrieben.

Artikel aus XML-Datei importieren #

Liest eine XML-Datei und importiert die enthaltenen Artikel in EULANDA. Das Beispiel nutzt die EULANDA COM-Schnittstelle (iScript).

import win32com.client

app = win32com.client.Dispatch("Eulanda.Application")
cli = app.Clients(0)
cli.Active = True

xml_eul = cli.CreateObject("XMLLIB")
desktop = cli.Properties("FOLDER.DESKTOP")
xml_eul.LoadFromFile(desktop + "\\ARTIKEL.XML")
xml_eul.SaveToDB("SALESARTICLE")

xml_eul = None
cli = None
app = None

Artikel programmatisch erzeugen und importieren (COM) #

Erzeugt ein XML-Dokument über Microsoft.XMLDOM und importiert es über das XMLLIB-Objekt.

import win32com.client
from datetime import datetime

def add_element(xml_doc, parent, name, value):
    element = xml_doc.createElement(name)
    parent.appendChild(element)
    parent.lastChild.text = str(value)

app = win32com.client.Dispatch("Eulanda.Application")
cli = app.Clients(0)
cli.Active = True

xml_eul = cli.CreateObject("XMLLIB")

# XML-Dokument aufbauen
xml_doc = win32com.client.Dispatch("Microsoft.XMLDOM")
xml_doc.async_ = False
xml_doc.loadXML(
    '<?xml version="1.0" encoding="WINDOWS-1252"?>'
    "<EULANDA></EULANDA>"
)
root = xml_doc.documentElement

# Metadaten
metadata = xml_doc.createNode(1, "METADATA", "")
root.appendChild(metadata)
add_element(xml_doc, metadata, "VERSION", "1.1")
add_element(xml_doc, metadata, "GENERATOR", "Python")
add_element(xml_doc, metadata, "DATEFORMAT", "ISO8601")
add_element(xml_doc, metadata, "FLOATFORMAT", "US")
add_element(xml_doc, metadata, "FIELDNAMES", "NATIVE")
add_element(xml_doc, metadata, "DATE", datetime.now().strftime("%Y-%m-%dT%H:%M:%S"))

# Artikelliste
artikel_liste = xml_doc.createNode(1, "ARTIKELLISTE", "")
root.appendChild(artikel_liste)

# Erster Artikel
artikel = xml_doc.createNode(1, "ARTIKEL", "")
artikel_liste.appendChild(artikel)
add_element(xml_doc, artikel, "ID.ALIAS", "4711")
add_element(xml_doc, artikel, "ARTNUMMER", "4711")
add_element(xml_doc, artikel, "KURZTEXT1", "Mein Kurztext zu 4711")
add_element(xml_doc, artikel, "LANGTEXT", "Mein Langtext zu 4711")
add_element(xml_doc, artikel, "VK", "47.23")

# Zweiter Artikel
artikel = xml_doc.createNode(1, "ARTIKEL", "")
artikel_liste.appendChild(artikel)
add_element(xml_doc, artikel, "ID.ALIAS", "0815")
add_element(xml_doc, artikel, "ARTNUMMER", "0815")
add_element(xml_doc, artikel, "KURZTEXT1", "Mein Kurztext zu 0815")
add_element(xml_doc, artikel, "LANGTEXT", "Mein Langtext zu 0815")
add_element(xml_doc, artikel, "VK", "66.65")

# Import ausführen
xml_eul.LoadFromXml(xml_doc.documentElement.xml)
xml_eul.SaveToDB("SALESARTICLE")

print("Import abgeschlossen.")

Artikel als XML exportieren (COM) #

Exportiert alle Artikel aus EULANDA in eine XML-Datei.

import win32com.client
import os

app = win32com.client.Dispatch("Eulanda.Application")
cli = app.Clients(0)
cli.Active = True

xml_eul = cli.CreateObject("XMLLIB")
xml_eul.LoadFromDB("SALESARTICLE")

desktop = cli.Properties("FOLDER.DESKTOP")
xml_eul.SaveToFile(os.path.join(desktop, "ArtikelExport.xml"))

print(f"{xml_eul.RecordCount} Artikel exportiert.")

XML nativ mit Python erzeugen (ohne COM) #

Für einfache Fälle kann das XML auch direkt mit Python erzeugt und dann per ADO importiert werden. Dieses Beispiel nutzt xml.etree.ElementTree aus der Python-Standardbibliothek.

import win32com.client
import xml.etree.ElementTree as ET
from datetime import datetime

# XML-Dokument aufbauen
eulanda = ET.Element("EULANDA")

# Metadaten
metadata = ET.SubElement(eulanda, "METADATA")
ET.SubElement(metadata, "VERSION").text = "1.1"
ET.SubElement(metadata, "GENERATOR").text = "Python-ET"
ET.SubElement(metadata, "DATEFORMAT").text = "ISO8601"
ET.SubElement(metadata, "FLOATFORMAT").text = "US"
ET.SubElement(metadata, "FIELDNAMES").text = "NATIVE"
ET.SubElement(metadata, "DATE").text = datetime.now().strftime("%Y-%m-%dT%H:%M:%S")

# Artikelliste
artikel_liste = ET.SubElement(eulanda, "ARTIKELLISTE")

# Artikel hinzufuegen
artikel_daten = [
    {"nr": "PY-001", "text": "Python-Artikel 1", "preis": "29.95"},
    {"nr": "PY-002", "text": "Python-Artikel 2", "preis": "49.50"},
]

for a in artikel_daten:
    artikel = ET.SubElement(artikel_liste, "ARTIKEL")
    ET.SubElement(artikel, "ID.ALIAS").text = a["nr"]
    ET.SubElement(artikel, "ARTNUMMER").text = a["nr"]
    ET.SubElement(artikel, "KURZTEXT1").text = a["text"]
    ET.SubElement(artikel, "VK").text = a["preis"]

# Als String fuer XMLLIB
xml_string = ET.tostring(eulanda, encoding="unicode")

# Import ueber EULANDA COM
app = win32com.client.Dispatch("Eulanda.Application")
cli = app.Clients(0)
cli.Active = True

xml_eul = cli.CreateObject("XMLLIB")
xml_eul.LoadFromXml(xml_string)
xml_eul.SaveToDB("SALESARTICLE")

print(f"{len(artikel_daten)} Artikel importiert.")

Siehe auch #