{"id":55000236,"date":"2020-08-01T00:00:00","date_gmt":"2020-11-26T14:14:37","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=236"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Bestellungen_per_XmlWriter_in_XML_exportieren","status":"publish","type":"post","link":"https:\/\/vbentwickler.de\/Bestellungen_per_XmlWriter_in_XML_exportieren\/","title":{"rendered":"Bestellungen per XmlWriter in XML exportieren"},"content":{"rendered":"<p><b>Im Artikel &#8220;XML-Dokumente erstellen mit XmlWriter&#8221; haben wir die grundlegenden Techniken beschrieben, mit denen Sie XML-Dokumente mit der XmlWriter-Klasse erzeugen und mit den gew&uuml;nschten Daten f&uuml;llen. Im vorliegenden Artikel liefern wir ein Praxisbeispiel dazu und wollen die Daten eines Entity Data Models, das aus einer SQL Server-Datenbank bef&uuml;llt wird, in ein XML-Dokument schreiben. Dieses k&ouml;nnen Sie dann mit der L&ouml;sung aus dem Artikel &#8220;Bestellungen per XmlReader einlesen&#8221; wieder einlesen und somit Daten zwischen zwei Anwendungen per XML-Dokument &uuml;bertragen.<\/b><\/p>\n<p>Im Artikel <b>Bestellungen per XmlReader einlesen <\/b>(<b>www.datenbankentwickler.net\/234<\/b>) haben wir gezeigt, wie Sie Daten aus einem XML-Dokument in ein Entity Data Model einlesen und diese dann in der damit verkn&uuml;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&auml;ten <b>Kunde<\/b>, <b>Bestellung <\/b>und <b>Bestelldetail<\/b> aufgebaut ist. Dar&uuml;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.<\/p>\n<p>Damit lernen Sie nicht nur die M&ouml;glichkeiten der <b>XmlWriter<\/b>-Klasse besser kennen, sondern es ist auch eine sch&ouml;ne Finger&uuml;bung f&uuml;r den Umgang mit den Daten eines Entity Data Models.<\/p>\n<p><b>Dokument erstellen und Schreiben der Daten initialisieren<\/b><\/p>\n<p>Die Schaltfl&auml;che <b>btnKundenUndBestellungenInXMLDokument<\/b> l&ouml;st die folgende Methode aus. Diese deklariert neben einer Variablen f&uuml;r die Zieldatei noch ein Listenelement f&uuml;r die Kunden sowie ein <b>XmlWriter<\/b>&#8211; und ein <b>XmlWriterSettings<\/b>-Objekt. Letzteres erstellt die Methode zuerst und legt fest, dass wir Einr&uuml;ckungen mit vier Leerzeichen verwenden wollen:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>btnKundenUndBestellungenInXMLDokument_Click(sender<span style=\"color:blue;\"> As Object<\/span>, e<span style=\"color:blue;\"> As <\/span>RoutedEventArgs)\r\n     <span style=\"color:blue;\">Dim <\/span>strXmlDatei<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>Kunden<span style=\"color:blue;\"> As <\/span>List(Of Kunde)\r\n     <span style=\"color:blue;\">Dim <\/span>objWriter<span style=\"color:blue;\"> As <\/span>XmlWriter\r\n     <span style=\"color:blue;\">Dim <\/span>objSettings<span style=\"color:blue;\"> As <\/span>XmlWriterSettings\r\n     objSettings = <span style=\"color:blue;\">New<\/span> XmlWriterSettings\r\n     <span style=\"color:blue;\">With<\/span> objSettings\r\n         .Indent = <span style=\"color:blue;\">True<\/span>\r\n         .IndentChars = \"    \"\r\n     End <span style=\"color:blue;\">With<\/span><\/pre>\n<p>Danach ermitteln wir mit der Funktion <b>ZieldateiErmitteln <\/b>den Pfad zu der zu erstellenden Datei und erstellen unter Angabe dieses Pfades mit der <b>Create<\/b>-Methode das <b>XmlWriter<\/b>-Objekt:<\/p>\n<pre>     strXmlDatei = ZieldateiErmitteln()\r\n     objWriter = XmlWriter.Create(strXmlDatei, objSettings)<\/pre>\n<p>Nach dem notwendigen Aufruf der <b>WriteStartDocument<\/b>-Methode f&uuml;llen wir alle Kunden der Tabelle <b>Kunden <\/b>&uuml;ber das <b>DbSet <\/b>namens <b>Kunden <\/b>des Entity Data Models in die Liste <b>Kunden<\/b>. Damit und mit <b>objWriter <\/b>als Parameter rufen wir eine weitere Methode namens <b>KundenInXMLSchreiben <\/b>auf, welche die Kunden zum XML-Dokument hinzuf&uuml;gen soll:<\/p>\n<pre>     objWriter.WriteStartDocument()\r\n     Kunden = <span style=\"color:blue;\">New<\/span> List(Of Kunde)(dbContext.Kunden)\r\n     KundenInXMLSchreiben(objWriter, Kunden)\r\n     objWriter.WriteEndElement()\r\n     objWriter.WriteEndDocument()\r\n     objWriter.Close()\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b>Zielpfad mit SaveFileDialog ausw&auml;hlen<\/b><\/p>\n<p>Die oben verwendete Funktion <b>ZieldateiErmitteln <\/b>verwendet die <b>SaveFileDialog<\/b>-Klasse, um den Zielpfad zu ermitteln. Dazu stellen wir als Standard-Dateiendung den Wert <b>.xml<\/b>, als Filter ebenfalls <b>.xml <\/b>und als Startverzeichnis das Verzeichnis der <b>.exe<\/b>-Datei der Anwendung ein. Die <b>ShowDialog<\/b>-Methode &ouml;ffnet den Dialog und der Code l&auml;uft erst weiter, wenn dieser geschlossen wird. Liefert <b>ShowDialog <\/b>den Wert <b>True<\/b>, wurde eine Datei ausgew&auml;hlt. Diese speichert die Methdoe in <b>strZieldatei <\/b>gespeichert und gibt den enthalten Wert dann mit <b>Return <\/b>an die aufrufende Routine zur&uuml;ck:<\/p>\n<pre><span style=\"color:blue;\">Private Function <\/span>ZieldateiErmitteln()\r\n     <span style=\"color:blue;\">Dim <\/span>objFileDialog<span style=\"color:blue;\"> As <\/span>SaveFileDialog\r\n     <span style=\"color:blue;\">Dim <\/span>strZieldatei<span style=\"color:blue;\"> As String<\/span>\r\n     objFileDialog = <span style=\"color:blue;\">New<\/span> SaveFileDialog\r\n     <span style=\"color:blue;\">With<\/span> objFileDialog\r\n         .DefaultExt = \".xml\"\r\n         .Filter = \"XML-Dokumente (.xml)|*.xml\"\r\n         .InitialDirectory = System.AppDomain.CurrentDomain.BaseDirectory\r\n     End <span style=\"color:blue;\">With<\/span>\r\n     <span style=\"color:blue;\">If <\/span>(objFileDialog.ShowDialog) = <span style=\"color:blue;\">True<\/span><span style=\"color:blue;\"> Then<\/span>\r\n         strZieldatei = objFileDialog.FileName\r\n     <span style=\"color:blue;\">End If<\/span>\r\n     Return strZieldatei\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<p><b>Kunden in die XML-Datei schreiben<\/b><\/p>\n<p>Die von der Hauptmethode aufgerufene Routine KundenInXMLSchreiben erwartet zwei Parameter: das <b>XmlWriter<\/b>-Objekt aus <b>objWriter <\/b>sowie die dort ermittelte Liste der Kunden aus der Datenbank. Wichtig ist, dass Sie den Parameter <b>objWriter <\/b>mit dem Schl&uuml;sselwort <b>ByRef <\/b>auszeichnen. So wirken sich die &Auml;nderungen an <b>objWriter <\/b>aus dieser Routine auch auf die Variable aus, die von der aufrufenden Methode aus &uuml;bergeben wurde.<\/p>\n<div class=\"rcp_restricted\"><p><span style=\"color: #ff0000;\">M&ouml;chten Sie weiterlesen? Dann l&ouml;sen Sie Ihr Ticket!<\/span><br \/>\n<span style=\"color: #ff0000;\">Hier geht es zur Bestellung des Jahresabonnements des Magazins <strong>Visual Basic Entwickler<\/strong>:<\/span><br \/>\n<span style=\"color: #ff0000;\"><a style=\"color: #ff0000;\" href=\"https:\/\/shop.minhorst.com\/magazine\/363\/visual-basic-entwickler-jahresabonnement?c=77\">Zur Bestellung ...<\/a><\/span><br \/>\n<span style=\"color: #ff0000;\">Danach greifen Sie sofort auf <strong>alle rund 200 Artikel<\/strong> unseres Angebots zu - auch auf diesen hier!<\/span><br \/>\n<span style=\"color: #000000;\">Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:<\/span><\/p>\n<\/div>\n\n\t\n\t<form id=\"rcp_login_form\"  class=\"rcp_form\" method=\"POST\" action=\"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000236\/\">\n\n\t\t\n\t\t<fieldset class=\"rcp_login_data\">\n\t\t\t<p>\n\t\t\t\t<label for=\"rcp_user_login\">Username or Email<\/label>\n\t\t\t\t<input name=\"rcp_user_login\" id=\"rcp_user_login\" class=\"required\" type=\"text\"\/>\n\t\t\t<\/p>\n\t\t\t<p>\n\t\t\t\t<label for=\"rcp_user_pass\">Password<\/label>\n\t\t\t\t<input name=\"rcp_user_pass\" id=\"rcp_user_pass\" class=\"required\" type=\"password\"\/>\n\t\t\t<\/p>\n\t\t\t\t\t\t<p>\n\t\t\t\t<input type=\"checkbox\" name=\"rcp_user_remember\" id=\"rcp_user_remember\" value=\"1\"\/>\n\t\t\t\t<label for=\"rcp_user_remember\">Remember me<\/label>\n\t\t\t<\/p>\n\t\t\t<p class=\"rcp_lost_password\"><a href=\"\/data\/wp\/v2\/posts\/55000236?rcp_action=lostpassword\"><\/a><\/p>\n\t\t\t<p>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_action\" value=\"login\"\/>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_redirect\" value=\"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000236\/\"\/>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_login_nonce\" value=\"dbce743e9d\"\/>\n\t\t\t\t<input id=\"rcp_login_submit\" class=\"rcp-button\" type=\"submit\" value=\"Login\"\/>\n\t\t\t<\/p>\n\t\t\t\t\t<\/fieldset>\n\n\t\t\n\t<\/form>\n<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Im Artikel &#8220;XML-Dokumente erstellen mit XmlWriter&#8221; haben wir die grundlegenden Techniken beschrieben, mit denen Sie XML-Dokumente mit der XmlWriter-Klasse erzeugen und mit den gew&uuml;nschten Daten f&uuml;llen. Im vorliegenden Artikel liefern wir ein Praxisbeispiel dazu und wollen die Daten eines Entity Data Models, das aus einer SQL Server-Datenbank bef&uuml;llt wird, in ein XML-Dokument schreiben. Dieses k&ouml;nnen Sie dann mit der L&ouml;sung aus dem Artikel &#8220;Bestellungen per XmlReader einlesen&#8221; wieder einlesen und somit Daten zwischen zwei Anwendungen per XML-Dokument &uuml;bertragen.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[662020,66042020,44000027,44000012],"tags":[],"yst_prominent_words":[],"class_list":["post-55000236","post","type-post","status-publish","format-standard","hentry","category-662020","category-66042020","category-Excel_programmieren","category-Interaktiv"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000236","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/comments?post=55000236"}],"version-history":[{"count":0,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000236\/revisions"}],"wp:attachment":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/media?parent=55000236"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/categories?post=55000236"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/tags?post=55000236"},{"taxonomy":"yst_prominent_words","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/yst_prominent_words?post=55000236"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}