Bestellungen per XmlWriter in XML exportieren

Im Artikel “XML-Dokumente erstellen mit XmlWriter” haben wir die grundlegenden Techniken beschrieben, mit denen Sie XML-Dokumente mit der XmlWriter-Klasse erzeugen und mit den gewünschten Daten füllen. Im vorliegenden Artikel liefern wir ein Praxisbeispiel dazu und wollen die Daten eines Entity Data Models, das aus einer SQL Server-Datenbank befüllt wird, in ein XML-Dokument schreiben. Dieses können Sie dann mit der Lösung aus dem Artikel “Bestellungen per XmlReader einlesen” wieder einlesen und somit Daten zwischen zwei Anwendungen per XML-Dokument übertragen.

Im Artikel Bestellungen per XmlReader einlesen (www.datenbankentwickler.net/234) haben wir gezeigt, wie Sie Daten aus einem XML-Dokument in ein Entity Data Model einlesen und diese dann in der damit verknüpften SQL Server-Datenbank speichern. Im vorliegenden Artikel wollen wir nun den umgekehrten Weg gehen. Dazu nutzen wir das im oben genannten Artikel erstellte Projekt. Dort haben wir schon beschrieben, wie das Entity Data Model, bestehend aus den drei Entitäten Kunde, Bestellung und Bestelldetail aufgebaut ist. Darüber wollen wir nun die Daten der dahinter stehenden Tabellen in das Entity Data Model einlesen und diese dann in ein neues XML-Dokument exportieren.

Damit lernen Sie nicht nur die Möglichkeiten der XmlWriter-Klasse besser kennen, sondern es ist auch eine schöne Fingerübung für den Umgang mit den Daten eines Entity Data Models.

Dokument erstellen und Schreiben der Daten initialisieren

Die Schaltfläche btnKundenUndBestellungenInXMLDokument löst die folgende Methode aus. Diese deklariert neben einer Variablen für die Zieldatei noch ein Listenelement für die Kunden sowie ein XmlWriter– und ein XmlWriterSettings-Objekt. Letzteres erstellt die Methode zuerst und legt fest, dass wir Einrückungen mit vier Leerzeichen verwenden wollen:

Private Sub btnKundenUndBestellungenInXMLDokument_Click(sender As Object, e As RoutedEventArgs)
     Dim strXmlDatei As String
     Dim Kunden As List(Of Kunde)
     Dim objWriter As XmlWriter
     Dim objSettings As XmlWriterSettings
     objSettings = New XmlWriterSettings
     With objSettings
         .Indent = True
         .IndentChars = "    "
     End With

Danach ermitteln wir mit der Funktion ZieldateiErmitteln den Pfad zu der zu erstellenden Datei und erstellen unter Angabe dieses Pfades mit der Create-Methode das XmlWriter-Objekt:

     strXmlDatei = ZieldateiErmitteln()
     objWriter = XmlWriter.Create(strXmlDatei, objSettings)

Nach dem notwendigen Aufruf der WriteStartDocument-Methode füllen wir alle Kunden der Tabelle Kunden über das DbSet namens Kunden des Entity Data Models in die Liste Kunden. Damit und mit objWriter als Parameter rufen wir eine weitere Methode namens KundenInXMLSchreiben auf, welche die Kunden zum XML-Dokument hinzufügen soll:

     objWriter.WriteStartDocument()
     Kunden = New List(Of Kunde)(dbContext.Kunden)
     KundenInXMLSchreiben(objWriter, Kunden)
     objWriter.WriteEndElement()
     objWriter.WriteEndDocument()
     objWriter.Close()
End Sub

Zielpfad mit SaveFileDialog auswählen

Die oben verwendete Funktion ZieldateiErmitteln verwendet die SaveFileDialog-Klasse, um den Zielpfad zu ermitteln. Dazu stellen wir als Standard-Dateiendung den Wert .xml, als Filter ebenfalls .xml und als Startverzeichnis das Verzeichnis der .exe-Datei der Anwendung ein. Die ShowDialog-Methode öffnet den Dialog und der Code läuft erst weiter, wenn dieser geschlossen wird. Liefert ShowDialog den Wert True, wurde eine Datei ausgewählt. Diese speichert die Methdoe in strZieldatei gespeichert und gibt den enthalten Wert dann mit Return an die aufrufende Routine zurück:

Private Function ZieldateiErmitteln()
     Dim objFileDialog As SaveFileDialog
     Dim strZieldatei As String
     objFileDialog = New SaveFileDialog
     With objFileDialog
         .DefaultExt = ".xml"
         .Filter = "XML-Dokumente (.xml)|*.xml"
         .InitialDirectory = System.AppDomain.CurrentDomain.BaseDirectory
     End With
     If (objFileDialog.ShowDialog) = True Then
         strZieldatei = objFileDialog.FileName
     End If
     Return strZieldatei
End Function

Kunden in die XML-Datei schreiben

Die von der Hauptmethode aufgerufene Routine KundenInXMLSchreiben erwartet zwei Parameter: das XmlWriter-Objekt aus objWriter sowie die dort ermittelte Liste der Kunden aus der Datenbank. Wichtig ist, dass Sie den Parameter objWriter mit dem Schlüsselwort ByRef auszeichnen. So wirken sich die Änderungen an objWriter aus dieser Routine auch auf die Variable aus, die von der aufrufenden Methode aus übergeben wurde.

Möchten Sie weiterlesen? Dann lösen Sie Ihr Ticket!
Hier geht es zur Bestellung des Jahresabonnements des Magazins DATENBANKENTWICKLER:
Zur Bestellung ...
Danach greifen Sie sofort auf alle rund 200 Artikel unseres Angebots zu - auch auf diesen hier!
Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:

Schreibe einen Kommentar