XML-Export, Teil 3: Elemente mit Inhalt füllenDer erste und zweite Teil dieser Serie stellen die Möglichkeiten zum Anlegen einer XML-Datei mit einem Wurzelelement und weiteren Unterelementen vor. Der vorliegende Teil enthält alle Informationen, die zum Füllen eines solchen XML-Dokuments mit den Daten aus der Datenbank erforderlich sind.
Teil 1: XML-Datei anlegen
Teil 2: Hinzufügen neuer Elemente
Teil 3: Elemente mit Inhalt füllen BeispieldatenbankDie Beispieldatenbank enthält unter anderem zwei Tabellen namens tblProjekte und tblKunden sowie ein Modul mit den nachfolgend beschriebenen Funktionen.

XML-Datei mit Daten erstellenDas Füllen eines Elementes eines XML-Dokuments erfolgt über die Zuweisung eines Wertes an die Eigenschaft Text des jeweiligen Element-Objekts. Das folgende kleine Beispiel zeigt die grundsätzliche Vorgehensweise:
Public Sub XMLElementMitInhaltHinzufuegen()
Dim objXML As New MSXML2.DOMDocument
Dim objElement As IXMLDOMElement
objXML.loadXML "<Projekt />"
Set objElement = objXML.createElement("Projekt")
objElement.Text = "Erstes Beispielprojekt"
objXML.documentElement.appendChild objElement
objXML.Save "c:\Projekte.xml"
Debug.Print objXML.XML
Set objXML = Nothing
End Sub
Das Ergebnis dieser Prozedur ist in Abbildung 1 zu bewundern.
Abbildung 1: Beispiel für ein Element mit Inhalt Komplexere Daten als XML-Datei exportierenMit der nachfolgenden Prozedur exportieren Sie die kompletten Projektdaten inklusive Kunden in eine XML-Datei. Dabei durchläuft die Prozedur zwei Schleifen: Die erste arbeitet alle Kunden ab, die zweite alle Projekte.
Public Sub KundenUndProjekteExportieren()
Dim db As DAO.Database
Dim rstProjekte As DAO.Recordset
Dim rstKunden As DAO.Recordset
Dim objXML As New MSXML2.DOMDocument
Dim objElementProjekt As IXMLDOMElement
Dim objElementKunde As IXMLDOMElement
Dim objElementTemp As IXMLDOMElement
Set db = CurrentDb
objXML.loadXML "<Kunden />"
Set rstKunden = db.OpenRecordset("tblKunden", dbOpenDynaset)
Do While Not rstKunden.EOF
Set objElementKunde = objXML.createElement("Kunde")
objXML.documentElement.appendChild objElementKunde
With objElementKunde
.setAttribute "KundeID", rstKunden!KundeID
Set objElementTemp = _
objXML.createElement("Kundenbezeichnung")
.appendChild(objElementTemp).Text = rstKunden!Kunde
Set objElementTemp = objXML.createElement("Strasse")
.appendChild(objElementTemp).Text = rstKunden!Strasse
Set objElementTemp = objXML.createElement("PLZ")
.appendChild(objElementTemp).Text = rstKunden!PLZ
Set objElementTemp = objXML.createElement("Ort")
.appendChild(objElementTemp).Text = rstKunden!Ort
Set objElementProjekte = _
.appendChild(objXML.createElement("Projekte"))
Set rstProjekte = _
db.OpenRecordset("SELECT * FROM tblProjekte " _
& "WHERE KundeID = " _
& rstKunden!KundeID, dbOpenDynaset)
With objElementProjekte
Do While Not rstProjekte.EOF
Set objElementProjekt = _
.appendChild(objXML.createElement("Projekt"))
With objElementProjekt
.setAttribute "ProjektID", rstProjekte!ProjektID
Set objElementTemp = _
objXML.createElement("Projektbezeichnung")
.appendChild(objElementTemp).Text = _
rstProjekte!Projektbezeichnung
Set objElementTemp = _
objXML.createElement("Projektstart")
.appendChild(objElementTemp).Text = _
rstProjekte!Projektstart
Set objElementTemp = _
objXML.createElement("ProjektEnde")
.appendChild(objElementTemp).Text = _
rstProjekte!Projektende
Set objElementTemp = _
objXML.createElement("Projektleiter")
.appendChild(objElementTemp).Text = _
rstProjekte!Projektleiter
End With
rstProjekte.MoveNext
Loop
rstKunden.MoveNext
End With
rstProjekte.Close
Set rstProjekte = Nothing
End With
Loop
objXML.Save "c:\Projekte.xml"
Set objXML = Nothing
rstProjekte.Close
Set rstProjekte = Nothing
Set db = Nothing
End Sub
Das Resultat dieser Prozedur sieht wie in Abbildung 2 aus.
Abbildung 2: Kunden und Projekte im XML-Format |