graudon
Goto Top

MSAccess xml-Datei nach Vorlage(Schema) erzeugen

Hallo und guten Tag,

ich habe eine Frage zum xml-Export von Abfragen in Access. Die Funktion ist mir soweit vom Grundsatz her klar.

Ich würde aber gerne ein vordefiniertes xml- Schema verwenden, z.B. von einer Standardisierungsstelle und dort meine Daten einfügen. Hier komme ich aber irgendwie nicht weiter. Ich führe die Abfrage aus und exportiere das Ergebnis in xml. Dort kann ich auch angeben, das ein Schema mit erstellt werden soll. Aber ich habe ja ein Schema und dort sollen die Daten eingetragen werden.

Wer könnte mir da mal einen Tip geben.

Danke und Grüsse

Graudon

Content-Key: 22845808858

Url: https://administrator.de/contentid/22845808858

Printed on: June 20, 2024 at 22:06 o'clock

Member: colinardo
Solution colinardo May 06, 2024 updated at 11:23:00 (UTC)
Goto Top
Servus Graudon,
dafür wirst du wohl oder übel wenn es aus Access heraus geschehen soll, VBA bemühen müssen: Damit kannst du XML Dokumente nach beliebigen Schemata umsetzen. Als kurze Demonstration wie so etwas aussehen kann habe ich dir hier eine einfache Tabelle in ein XML-Dokument übersetzt.

Als Quelle dient diese Tabelle:

screenshot

Sub ExportDataToXMLSchema()
    Dim db As Database, rs As Recordset, xml As Object, pi As Object, root As Object, client As Object, el As Object, dbFolder As String, fso As Object, c As Long
    ' process current database  
    Set db = CurrentDb
    ' create XML Document  
    Set xml = CreateObject("MSXML2.DomDocument.6.0")  
    Set fso = CreateObject("Scripting.FileSystemObject")  
    Set pi = xml.createProcessingInstruction("xml", "version=""1.0"" encoding=""utf-8""")  
    xml.insertBefore pi, xml.childNodes.Item(0)
    ' create document element  
    Set root = xml.createElement("Adressen")  
    ' and add it to the document  
    xml.appendChild root
    ' get data from the source table  
    Set rs = db.OpenRecordset("Kunden")  
    ' move to the first recordset  
    rs.MoveFirst
    ' process each record from data source  
    While Not rs.EOF
        ' create element for row  
        Set client = xml.createElement("Kunde")  
        ' append the row node to the document element  
        root.appendChild client
        ' for each column in the record  
        For c = 0 To rs.Fields.Count - 1
            ' create a new element  
            Set el = xml.createElement(rs.Fields(c).Name)
            ' and assign the data from the column to the element  
            el.Text = rs.Fields(c).Value
            ' append the element as childnode to he row node  
            client.appendChild el
        Next
        ' process next row  
        rs.MoveNext
    Wend
    ' get the folder of the current database  
    dbFolder = fso.GetParentFolderName(db.Name)
    ' save the xml as a file  
    xml.Save dbFolder & "\" & "test-export.xml"  
End Sub

Das Ergebnis ist dann eine XML-Datei die im Verzeichnis der Datenbank abgelegt wird und folgendermaßen aussieht:

<?xml version="1.0" encoding="utf-8"?>  
<Adressen>
	<Kunde>
		<ID>1</ID>
		<Vorname>Max</Vorname>
		<Nachname>Muster</Nachname>
		<Straße>Musterstr. 55</Straße>
		<PLZ>66666</PLZ>
		<Ort>Musterhausen</Ort>
	</Kunde>
	<Kunde>
		<ID>2</ID>
		<Vorname>Erika</Vorname>
		<Nachname>Musterfrau</Nachname>
		<Straße>Musterweg 11</Straße>
		<PLZ>99999</PLZ>
		<Ort>Musterdorf</Ort>
	</Kunde>
</Adressen>

Außerhalb von Access gibt es natürlich diverse andere Methoden die Daten aus Access in beliebige XML Schemata zu pressen, ob das gescriptet mit Powershell, anderen Skriptsprachen, oder etwa mir einem spezialisierten Datentransformations-Tool wie Altova MapForce geschieht, entscheidet natürlich auch dein Workflow.

Grüße Uwe
Member: Graudon
Graudon May 06, 2024 at 11:22:08 (UTC)
Goto Top
Hallo Uwe, interessant wäre das z.B. bei der Rechnungserstellung via ZUGFerD.

Hier hat man das Schema und muss es entsprechend füllen.

Das war meine Idee 🤷‍♂️
Member: colinardo
colinardo May 06, 2024 updated at 11:34:35 (UTC)
Goto Top
Zitat von @Graudon:
Hallo Uwe, interessant wäre das z.B. bei der Rechnungserstellung via ZUGFerD.
Hier hat man das Schema und muss es entsprechend füllen.
Dann musst du dich mit dem Schema auseinandersetzen und die Daten entsprechend in die passenden Elemente wie oben beschrieben bringen. face-smile. Von selbst passiert das natürlich nicht mit einem Einzeiler, da musst du erst selbst Arbeit investieren, denn eure Datenbank kennt ja nur ihr face-wink.

p.s. Einfacher geht das in Access mit einer passenden ZUGFeRD Bibliothek
Access - Rechnungen mit ZUGFeRD 1.0, Teil 1: .NET
Member: Graudon
Graudon May 06, 2024 at 11:33:33 (UTC)
Goto Top
ja da hast du vollkommen recht. Aber dein Vorschlag klingt richtig gut und sogar für mich mit etwas Aufwand machbar. -also schon mal wieder vielen Dank für die Hilfe!
Member: colinardo
colinardo May 06, 2024 updated at 11:36:14 (UTC)
Goto Top
Gerne. You're welcome.