{"id":55000235,"date":"2020-08-01T00:00:00","date_gmt":"2020-11-26T11:30:38","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=235"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"XMLDokumente_erstellen_mit_XmlWriter","status":"publish","type":"post","link":"https:\/\/vbentwickler.de\/XMLDokumente_erstellen_mit_XmlWriter\/","title":{"rendered":"XML-Dokumente erstellen mit XmlWriter"},"content":{"rendered":"<p><b>Im Artikel &#8220;XML-Dokumente schnell lesen mit XmlReader&#8221; haben Sie die Klasse XmlReader kennengelernt, mit der Sie schnell durch XML-Dokumente navigieren k&ouml;nnen. Damit k&ouml;nnen Sie zum Beispiel Exporte aus anderen Anwendungen in Ihre .NET-Anwendung importieren. Aber was, wenn Sie selbst einmal einen Export mit Ihren Daten im XML-Format bereitstellen wollen Dazu gibt es eine passende Klasse namens XmlWriter. Wie Sie damit XML-Dokumente erstellen und mit den gew&uuml;nschten Daten f&uuml;llen, erfahren Sie im vorliegenden Artikel.<\/b><\/p>\n<p><b>Namespace System.Xml referenzieren<\/b><\/p>\n<p>Genau wie die Klasse <b>XmlReader <\/b>ist auch <b>XmlWriter <\/b>Bestandteil des Namespaces <b>System.Xml<\/b>. Diesen referenzieren wir deshalb wie folgt im Kopf der Code behind-Klasse unseres Beispielfensters <b>MainWindow.xaml<\/b>:<\/p>\n<pre>Imports System.Xml<\/pre>\n<p><b>Leeres XML-Dokument erstellen mit Create<\/b><\/p>\n<p>Um ein XML-Dokument als Datei zu erstellen, rufen Sie die Methode <b>Create <\/b>des <b>XmlWriter<\/b>-Objekts auf und &uuml;bergeben dieser den Pfad der zu erstellenden XML-Datei. Wenn Sie einfach nur den Dateinamen angeben, wird die Datei im gleichen Verzeichnis erstellt wie die <b>.exe<\/b>-Datei des Projekts:<\/p>\n<pre><span style=\"color:blue;\">Dim <\/span>objWriter<span style=\"color:blue;\"> As <\/span>XmlWriter\r\nobjWriter = XmlWriter.Create(\"XmlWriter.xml\")\r\nobjWriter.Close()<\/pre>\n<p>Dies legt allerdings nur ein leeres Dokument an.<\/p>\n<p><b>XML-Dokument mit Element erstellen<\/b><\/p>\n<p>Um ein Dokument mit dem Prolog und einem ersten Element zu erstellen, bedarf es einiger weiterer Zeilen. Die Methoden <b>Write-StartDocument <\/b>und <b>WriteEndDokument <\/b>starten den Schreibprozess und beenden diesen wieder. Die Methode <b>WriteStart-Element <\/b>f&uuml;gt ein Starttag namens <b>Bestellverwaltung <\/b>hinzu und <b>WriteEndElement <\/b>schlie&szlig;t das Element mit dem Endtag ab. Dabei m&uuml;ssen Sie <b>WriteEndElement <\/b>keinen Parameter mehr &uuml;bergeben &#8211; die Methode bezieht sich immer auf das zuletzt ge&ouml;ffnete Starttag:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>btnDokumentMitElementErstellen_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>objWriter<span style=\"color:blue;\"> As <\/span>XmlWriter\r\n     objWriter = XmlWriter.Create(\"XmlWriter.xml\", objSettings)\r\n     objWriter.WriteStartDocument()\r\n     objWriter.WriteStartElement(\"Bestellverwaltung\")\r\n     objWriter.WriteEndElement()\r\n     objWriter.WriteEndDocument()\r\n     objWriter.Close()\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Das Ergebnis ist das folgende XML-Dokument:<\/p>\n<pre>&lt;xml version=\"1.0\" encoding=\"utf-8\"&gt;&lt;Bestellverwaltung \/&gt;<\/pre>\n<p>Hier finden wir keinen Zeilenumbruch, was wir als Erstes &auml;ndern m&ouml;chten <\/p>\n<p><b>Eigenschaften f&uuml;r das Erstellen festlegen<\/b><\/p>\n<p>Die <b>Create<\/b>-Methode erwartet in einer &Uuml;berladung einen zweiten Parameter des Typs <b>XmlWriterSettings<\/b>. Wir erstellen also zuvor ein solches Objekt und &uuml;bergeben es dann &#8211; allerdings nicht, ohne einige Eigenschaften dieser Klasse zu nutzen:<\/p>\n<ul>\n<li><b>Encoding<\/b>: Gibt an, ob das Dokument mit UTF8, Unicode oder einer anderen Kodierung erstellt werden soll. Die verschiedenen Werte stellt <b>System.Text.Encoding <\/b>zur Verf&uuml;gung, was Sie auch per IntelliSense nutzen k&ouml;nnen. Standardwert ist <b>UTF8<\/b>.<\/li>\n<li><b>Indent<\/b>: Boolean-Wert, der angibt, ob Einr&uuml;ckungen hinzugef&uuml;gt werden sollen.<\/li>\n<li><b>IndentChar<\/b>: String-Wert, der die f&uuml;r einen Einr&uuml;ckungsschritt zu verwendende Zeichenkette enth&auml;lt. Wenn Sie das Tabulator-zeichen verwenden wollen, geben Sie etwa <b>ControlChars.Tab <\/b>an, wenn Sie eine bestimmte Anzahl Leerzeichen verwenden wollen, nutzen Sie einfach die Zeichenkette <b>&#8221;    &#8220;<\/b>.<\/li>\n<li><b>NewLineChars<\/b>: Gibt an, welches Zeichen f&uuml;r Zeilenumbr&uuml;che verwendet werden soll (Standard: <b>Chr(13) + Chr(10)<\/b>).<\/li>\n<li><b>NewLineOnAttributes<\/b>: Gibt an, ob Attribute in einer eigenen Zeile ausgegeben werden sollen. Dient bei vielen Attributen gegebenenfalls der &Uuml;bersichtlichkeit beim manuellen Lesen.<\/li>\n<li><b>OmitXmlDeclaration<\/b>: Gibt mit <b>True <\/b>an, ob der Prolog weggelassen werden soll.<\/li>\n<\/ul>\n<p>Im folgenden Beispiel nutzen wir die beiden Eigenschaften <b>Indent <\/b>und <b>IndentChar<\/b>, um festzulegen, dass jeder Einzug durch vier Leerzeichen realisiert werden soll. Au&szlig;erdem haben wir ein paar weitere Elemente unterhalb des <b>Bestellverwaltung<\/b>-Elements hinzuf&uuml;gt, damit die Einz&uuml;ge im erstellten Dokument zur Geltung kommen:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>btnDokumentMitEinstellungen_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>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>\r\n     objWriter = XmlWriter.Create(\"XmlWriter.xml\", objSettings)\r\n     objWriter.WriteStartDocument()\r\n     objWriter.WriteStartElement(\"Bestellverwaltung\")\r\n     objWriter.WriteStartElement(\"Kunden\")\r\n     objWriter.WriteEndElement()\r\n     objWriter.WriteEndElement()\r\n     objWriter.WriteEndDocument()\r\n     objWriter.Close()\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\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\/55000235\/\">\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\/55000235?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\/55000235\/\"\/>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_login_nonce\" value=\"2987d086e8\"\/>\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 schnell lesen mit XmlReader&#8221; haben Sie die Klasse XmlReader kennengelernt, mit der Sie schnell durch XML-Dokumente navigieren k&ouml;nnen. Damit k&ouml;nnen Sie zum Beispiel Exporte aus anderen Anwendungen in Ihre .NET-Anwendung importieren. Aber was, wenn Sie selbst einmal einen Export mit Ihren Daten im XML-Format bereitstellen wollen Dazu gibt es eine passende Klasse namens XmlWriter. Wie Sie damit XML-Dokumente erstellen und mit den gew&uuml;nschten Daten f&uuml;llen, erfahren Sie im vorliegenden Artikel.<\/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,44000012,44000025],"tags":[],"yst_prominent_words":[],"class_list":["post-55000235","post","type-post","status-publish","format-standard","hentry","category-662020","category-66042020","category-Interaktiv","category-VBAProgrammierung"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000235","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=55000235"}],"version-history":[{"count":0,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000235\/revisions"}],"wp:attachment":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/media?parent=55000235"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/categories?post=55000235"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/tags?post=55000235"},{"taxonomy":"yst_prominent_words","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/yst_prominent_words?post=55000235"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}