Bestellungen per XmlWriter in XML exportieren

Lies in den Artikel rein und unten bekommst Du ein unschlagbares Angebot!

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:

 

Schreibe einen Kommentar