XML-Export, Teil 2: Hinzufügen neuer ElementeEs gibt mehr als einen Grund, Daten aus einer Access-Datenbank im XML-Format zu exportieren. Man kann die Daten mit einer entsprechenden XSL-Datei im Intranet oder Internet veröffentlichen oder sie in einer anderen Datenbank wieder importieren, wenn man gerade keine Lust oder nicht die Möglichkeit hat, die Quell- und Zieldatenbank miteinander zu verknüpfen.
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.

Hinzufügen von ElementenIm Vergleich zu der Prozedur aus dem ersten Teil dieses Beitrags soll die folgende Prozedur nicht nur ein neues XML-Dokument erzeugen, sondern zusätzlich ein Unterelement namens Kunde hinzufügen.
Dazu benötigen Sie ein zusätzliches Objekt vom Typ IXMLDOMElement. Die createElement-Methode der XML-Bibliothek weist diesem Objekt den gewünschten Namen hinzu. Da es nicht im luftleeren Raum herumschweben soll, verwendet die Prozedur anschließend noch die appendChild-Methode des documentElement-Objekts, um das neue Element an das Wurzelelement des Dokuments anzuhängen.
Public Sub XMLElementHinzufuegen()
Dim objXML As New MSXML2.DOMDocument
Dim objElement As IXMLDOMElement
objXML.loadXML "<Projekt />"
Set objElement = objXML.createElement("Projekt")
objXML.documentElement.appendChild objElement
objXML.Save "c:\Projekte.xml"
Set objXML = Nothing
End Sub Überprüfen des ErgebnissesFür die Betrachtung des Ergebnisses bietet sich natürlich das Öffnen des fertigen Dokuments an. Das ist aber mit der Zeit nervig, so dass man folgende Methode verwenden sollte: Bauen Sie einfach an den gewünschten Stellen die Ausgabe des aktuellen Inhalt des XML-Dokuments im Testfenster ein. Die entsprechende Anweisung lautet:
Debug.Print objXML.xml
Die xml-Eigenschaft enthält den aktuellen XML-Text des Dokuments. Hinzufügen von UnterelementenDas große Vorteil von XML-Dokumenten gegebenüber Textdokumenten ist, dass sie hierarchische Daten enthalten können. Um diese darzustellen, kann man jedem Element weitere Unterelemente hinzufügen. Das folgende Beispiel zeigt, wie man dem bisher aus den beiden Elementen Projekte und Projekt bestehenden XML-Dokument noch ein weiteres Element namens Kunde zuweist.
Dazu greift die Prozedur einfach den Verweis auf das zuerst erstellte Unterelement Projekt auf und fügt diesem per appendChild-Methode das neue Unterelement hinzu.
Public Sub XMLDokumentMitStruktur()
Dim objXML As New MSXML2.DOMDocument
Dim objElement As IXMLDOMElement
objXML.loadXML "<Projekte />"
Set objElement = objXML.createElement("Projekt")
objXML.documentElement.appendChild objElement
objElement.appendChild objXML.createElement("Kunde")
objXML.Save "c:\Projekte.xml"
Debug.Print objXML.XML
Set objXML = Nothing
End Sub
Entfernen von ElementenDie Methode RemoveElement dient zum Entfernen eines Elements aus dem XML-Dokument. Die folgende Zeile kann man beispielsweise in obigen Quelldcode integrieren:
objXML.documentElement.removeChild objElement XML mit StrukturMit den Grundlagen im Hinterkopf geht es nun an die Erstellung einer XML-Datei, die zwei miteinander verknüpfte Tabellen abbildet. Die folgende Prozedur erstellt ein XML-Dokument wie in Abbildung 1.
Abbildung 1: Ein strukturiertes XML-Dokument
Die Prozedur enthält nur bereits erwähnte Methoden. Sie fügt dem XML-Dokument lediglich einige Elemente mehr hinzu, die nunmehr alle Felder der beiden Tabellen tblProjekte und tblKunden aufnehmen können.
Public Sub XMLDokumentMitStruktur()
Dim objXML As New MSXML2.DOMDocument
Dim objElementProjekt As IXMLDOMElement
Dim objElementKunde As IXMLDOMElement
objXML.loadXML "<Projekte />"
Set objElementProjekt = objXML.createElement("Projekt")
objXML.documentElement.appendChild objElementProjekt
With objElementProjekt
.appendChild objXML.createElement("ProjektID")
.appendChild objXML.createElement("Projektbezeichnung")
.appendChild objXML.createElement("Projektstart")
.appendChild objXML.createElement("Projektende")
.appendChild objXML.createElement("Projektleiter")
Set objElementKunde = .appendChild(objXML.createElement("Kunde"))
With objElementKunde
.appendChild objXML.createElement("KundeID")
.appendChild objXML.createElement("Projektphasenbezeichnung")
.appendChild objXML.createElement("Projektphasenstart")
.appendChild objXML.createElement("Projektphasenende")
End With
End With
objXML.Save "c:\Projekte.xml"
Debug.Print objXML.XML
Set objXML = Nothing
End Sub
|