{"id":55000522,"date":"2007-12-01T00:00:00","date_gmt":"2021-02-11T21:18:54","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=522"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"XMLDokumente_mit_VBA_erstellen_und_lesen","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/XMLDokumente_mit_VBA_erstellen_und_lesen\/","title":{"rendered":"XML-Dokumente mit VBA erstellen und lesen"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg08.met.vgwort.de\/na\/da7415f4fecc403b9f3436dc7e7a397f\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>Schaut man sich in Foren und im Web um, so scheint XML im Zusammenhang mit Access und VBA mehr Fragen aufzuwerfen als zu beantworten. In den meisten F&auml;llen dreht es sich um das Problem, wie man per VBA ein XML-Dokument mit bestimmten Elementen und Attributen erzeugt. Die Grundlagen dazu liefert dieser Beitrag genauso wie die zum Auslesen der erzeugten XML-Dokumente.<\/b><\/p>\n<\/div>\n<div class=\"story\">\n<p>Meist ist es doch so: Jemand fordert den Export von Daten in einem bestimmten XML-Format an oder liefert dieses Format, das Sie dann flugs in die passenden Tabellen der Datenbank importieren sollen. Beides ist prinzipiell einfach, aber da das Internet bislang kaum Informationen zu diesem stark gefragten Thema liefert, muss man erst einmal herausfinden, wie die einzelnen Techniken ineinandergreifen. <\/p>\n<p>Dass dieses Thema tats&auml;chlich gefragt ist, zeigt die Zugriffsstatistik der Know-how-Beitr&auml;ge von <b>www.access-im-unternehmen.de<\/b>: Hier liegen die vier Artikel zum Thema XML meistenteils unter den Top Ten der am meisten abgerufenen Seiten.<\/p>\n<p><b>XML-Dokument als Zeichenkette<\/b><\/p>\n<p>Die einfachste Variante, um ein XML-Dokument zu erstellen, sind die herk&ouml;mmlichen Text-Funktionen von VBA. Ein Beispiel liefern die folgenden Zeilen. Sie erstellen ein XML-Dokument, wie es in Bild 1 abgebildet ist:<\/p>\n<div class=\"image\">\n    <img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2007_05\/XMLDomBasics-web-images\/abb001_opt.jpeg\" alt=\"abb001.tif\" \/>\n<\/div>\n<div class=\"story\">\n<p><b><span style=\"color:darkgrey\">Bild 1: Ein einfaches XML-Dokument<\/span><\/b><\/p>\n<\/div>\n<pre>Dim str As String\r\nstr = &quot;&lt;xml version=&apos;1.0&apos; encoding=&apos;iso-8859-1&apos;&gt;&quot; &amp; vbCrLf\r\nstr = str &amp; &quot;&lt;Rootelement&gt;&quot;\r\nstr = str &amp; &quot;&lt;Element&gt;&quot;\r\nstr = str &amp; &quot;Text des Elements&quot;\r\nstr = str &amp; &quot;&lt;\/Element&quot;\r\nstr = str &amp; &quot;&lt;\/Rootelement&gt;&quot;\r\nOpen &quot;c:\\text.xml&quot; For Output As #1\r\nPrint #1, str\r\nClose #1<\/pre>\n<p>Dabei stellen Sie die einzelnen Elemente des Dokuments St&uuml;ck f&uuml;r St&uuml;ck zu einer Zeichenkette zusammen und speichern diese anschlie&szlig;end in einer Datei. Wer in der Lage ist, mit DAO oder ADO eines oder mehrere verschachtelte Recordsets zu durchlaufen, braucht nur noch die passenden Anweisungen zum Zusammensetzen der Zeichenkette aus den gew&uuml;nschten Feldinhalten darin unterzubringen.<\/p>\n<p><b>XML-DOM<\/b><\/p>\n<p>Selbstverst&auml;ndlich ist das der am wenigsten elegante Weg und er ist zudem fehleranf&auml;llig. Besser funktioniert es, wenn Sie die f&uuml;r solche Zwecke vorgesehene XML-Bibliothek von Microsoft verwenden, die beispielsweise den Zugriff auf die einzelnen Elemente eines XML-Dokuments bietet &#8211; und zwar &uuml;ber das <b>Document Object Model <\/b>(<b>DOM<\/b>). Um dieses einzusetzen, brauchen Sie einen Verweis auf die Bibliothek <b>Microsoft XML, vx.y<\/b>. Sie werden eine ganze Reihe von Versionen dieser Bibliothek in der Liste vorfinden, von denen die &auml;lteste (v2.6) f&uuml;r die nachfolgenden Beispiele ausreicht. Jedes XML-Dokument enth&auml;lt eine Zeile, die das Dokument als XML-Dokument charakterisiert und weitere Informationen, wie etwa die Version oder Hinweise zur Kodierung der enthaltenen Zeichen, liefert. Diese Zeile sieht meist zumindest so aus:<\/p>\n<pre>&lt;xml version=&quot;1.0&quot;&gt;<\/pre>\n<p>Enthalten die Elemente Umlaute oder sonstige Sonderzeichen, empfiehlt sich die Angabe einer passenden Kodierung. Folgendes kleine Dokument w&uuml;rde beispielsweise im Internet Explorer einen Fehler ausl&ouml;sen:<\/p>\n<pre>&lt;xml version=&apos;1.0&apos;&gt;\r\n&lt;root&gt;&auml;&ouml;&uuml;&lt;\/root&gt;<\/pre>\n<p>Durch Hinzuf&uuml;gen eines weiteren Attributs zur ersten Zeile beheben Sie den Fehler:<\/p>\n<pre>&lt;xml version=&quot;1.0&quot; encoding=&quot;iso-8859-1&quot; &gt; \r\n&lt;Root&gt;&auml;&ouml;&uuml;&lt;\/Root&gt;<\/pre>\n<p>Die Kodierung <b>iso-8859-1 <\/b>sorgt daf&uuml;r, dass Sie Umlaute sowie andere Sonderzeichen im Dokument verwenden k&ouml;nnen, ohne dass Sie diese kodieren m&uuml;ssen &#8211; dann m&uuml;ssten Sie n&auml;mlich beispielsweise <b>&amp;#228; <\/b>f&uuml;r den Buchstaben <b>&auml; <\/b>schreiben.<\/p>\n<p><b>XML erzeugen &#8222;by example&#8220;<\/b><\/p>\n<p>Genug der Vorrede: Im Folgenden finden Sie Beispiele f&uuml;r verschiedene XML-Dokumente (jeweils im Kasten) und die passenden VBA-Anweisungen.<\/p>\n<table>\n<tbody>\n<tr>\n<td>\n<p class=\"kastentabelleheader\">Beispiel: Einfaches XML-Dokument mit <br \/>Root-Element<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p class=\"quellcodekasten\">&lt;xml version=&quot;1.0&quot; encoding=&quot;iso-8859-1&quot; &gt; <\/p>\n<p class=\"quellcodekasten\">&lt;root \/&gt;<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Dies ist fast das einfachste XML-Dokument, das Sie erzeugen k&ouml;nnen &#8211; es beinhaltet lediglich ein Element namens <b>root <\/b>(XML-Dokumente ohne ein einziges Element sind nicht g&uuml;ltig). Sie erzeugen es beispielsweise mit den folgenden Anweisungen:<\/p>\n<pre>Dim objXML As DOMDocument\r\nSet objXML = New DOMDocument\r\nobjXML.loadXML &quot;&lt;xml version=&apos;1.0&apos;<br \/>    encoding=&apos;iso-8859-1&apos;&gt;&lt;Rootelement\/&gt;&quot;\r\n&apos;objXML.Save &quot;c:\\text.xml&quot;<\/pre>\n<p>Das Problem hierbei ist, dass Sie den Inhalt der ersten Zeile von Hand zusammenschreiben m&uuml;ssen, was zu Fehlern f&uuml;hren k&ouml;nnte &#8211; beispielsweise, weil die Attribute nicht in der vorgeschriebenen Reihenfolge vorliegen.<\/p>\n<p>Besser macht es die folgende, aber l&auml;ngere Variante, die das gleiche Ergebnis liefert:<\/p>\n<pre>Dim objXML As DOMDocument\r\nDim objRoot As IXMLDOMElement\r\nDim objPI As IXMLDOMProcessingInstruction\r\nSet objXML = New DOMDocument\r\nSet objPI = _<br \/>    objXML.createProcessingInstruction(&quot;xml&quot;, _<br \/>    &quot;version=&apos;1.0&apos; encoding=&apos;iso-8859-1&apos;&quot;)\r\nSet objRoot = objXML.createElement(&quot;root&quot;)\r\nobjXML.appendChild objPI\r\nobjXML.appendChild objRoot\r\nobjXML.Save &quot;c:\\text.xml&quot;<\/pre>\n<p>Das sieht schon recht kompliziert aus, daher eine kurze Erl&auml;uterung: <b>objXML <\/b>erh&auml;lt zun&auml;chst ein neues, leeres XML-Dokument, noch ohne physische Entsprechung in Form einer Datei auf der Festplatte. Die Processing Instruction <b>objPI<\/b>, die zum Angeben von Verarbeitungsinformationen wird dann mithilfe der Methode <b>createProcessingInstruction <\/b>zusammengesetzt.<\/p>\n<p>Das Root-Element hat den Typ <b>IXMLDOMElement <\/b>&#8211; genau wie alle anderen Elemente, die Sie in den weiteren Beispielen hinzuf&uuml;gen werden. Beide Elemente, <b>objPI <\/b>und <b>objRoot<\/b>, f&uuml;gen Sie dem XML-Dokument <b>objXML <\/b>in genau dieser Reihenfolge mit der <b>appendChild<\/b>-Methode hinzu.<\/p>\n<p>Zusammen mit der Hilfsfunktion <b>AddFormat <\/b>aus dem Kasten <b>Prolog schreiben <\/b>brauchen Sie nur noch die folgenden Zeilen:<\/p>\n<pre>Public Sub XMLMitKodierungUndRootelement_III()\r\n    Dim objXML As DOMDocument\r\n    Dim objRoot As IXMLDOMElement\r\n    Set objXML = New DOMDocument\r\n    AddFormat objXML, eEncodingISO8859_1\r\n    Set objRoot = objXML.createElement(&quot;root&quot;)\r\n    objXML.appendChild objRoot\r\n    Debug.Print objXML.xml\r\n    objXML.Save &quot;c:\\text.xml&quot;\r\nEnd Sub<\/pre>\n<div class=\"abbildung\">\n<p class=\"tabellenkopf\">Prolog schreiben<\/p>\n<p>Der Prolog eines XML-Dokuments enth&auml;lt eine erste Zeile, die eine XML-Datei als solche kennzeichnet und weitere Informationen wie die Kodierung und die Version liefert. Zus&auml;tzlich kann der Prolog weitere Informationen enthalten, die hier aber zun&auml;chst au&szlig;er Acht bleiben sollen. Die folgende Funktion f&uuml;gt dem &uuml;bergebenen, zu diesem Zeitpunkt noch leeren XML-Dokument die besagte erste Zeile hinzu. Die Kodierung kann per Parameter &uuml;bergeben werden, der Standardwert ist <b>ISO-8859-1<\/b>.<\/p>\n<p class=\"quellcodekasten\">Public Function AddFormat(objXML As DOMDocument, intEncoding As eEncoding)<\/p>\n<p class=\"quellcodekasten\">    Dim objPI As IXMLDOMProcessingInstruction<\/p>\n<p class=\"quellcodekasten\">    Dim strEncoding As String<\/p>\n<p class=\"quellcodekasten\">    Select Case intEncoding<\/p>\n<p class=\"quellcodekasten\">        Case eEncodingUTF8<\/p>\n<p class=\"quellcodekasten\">            strEncoding = &quot;utf-8&quot;<\/p>\n<p class=\"quellcodekasten\">        Case eEncodingUTF16<\/p>\n<p class=\"quellcodekasten\">            strEncoding = &quot;utf-16&quot;<\/p>\n<p class=\"quellcodekasten\">        Case eEncodingISO8859_1<\/p>\n<p class=\"quellcodekasten\">            strEncoding = &quot;iso-8859-1&quot;<\/p>\n<p class=\"quellcodekasten\">    End Select<\/p>\n<p class=\"quellcodekasten\">    Set objPI = objXML.createProcessingInstruction(&quot;xml&quot;, &quot;version=&apos;1.0&apos; encoding=&apos;&quot; _<br \/>        &amp; strEncoding &amp; &quot;&apos;&quot;)<\/p>\n<p class=\"quellcodekasten\">    objXML.appendChild objPI<\/p>\n<p class=\"quellcodekasten\">End Function<\/p>\n<p>Die folgende Enumeration liefert die Elemente f&uuml;r die in der Routine verwendete Variable des Typs <b>eEncoding<\/b> f&uuml;r UTF-8, UTF-16 und ISO-8859-1:<\/p>\n<p class=\"quellcodekasten\">Public Enum eEncoding<\/p>\n<p class=\"quellcodekasten\">    eEncodingUTF8 = 1<\/p>\n<p class=\"quellcodekasten\">    eEncodingUTF16 = 2<\/p>\n<p class=\"quellcodekasten\">    eEncodingISO8859_1 = 3<\/p>\n<p class=\"quellcodekasten\">End Enum<\/p>\n<\/div>\n<p>Im &uuml;brigen d&uuml;rfen Sie sich nicht durch die Ausgabe im Direktfenster irritieren lassen, die die Kodierung vermissen l&auml;sst &#8211; in der gespeicherten Version ist diese vorhanden.<\/p>\n<table>\n<tbody>\n<tr>\n<td>\n<p class=\"kastentabelleheader\">Beispiel: Einfaches XML-Dokument mit <br \/>Root-Element und einem Unterelement<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p class=\"quellcodekasten\">&lt;xml version=&quot;1.0&quot; encoding=&quot;iso-8859-1&quot; &gt; <\/p>\n<p class=\"quellcodekasten\">&lt;root&gt;<\/p>\n<p class=\"quellcodekasten\">    &lt;element \/&gt;<\/p>\n<p class=\"quellcodekasten\">&lt;\/root&gt;<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Wenn Sie unterhalb des Root-Elements ein weiteres Element einf&uuml;gen m&ouml;chten &#8211; hier mit dem Namen <b>element <\/b>-, brauchen Sie zwei Schritte:<\/p>\n<ul>\n<li class=\"aufz-hlung\">Erzeugen des neuen Elements mit der <b>createElement<\/b>-Methode und<\/li>\n<li class=\"aufz-hlung\">Anh&auml;ngen des Elements an das gew&uuml;nschte &uuml;bergeordnete Element, hier <b>root<\/b>.<\/li>\n<\/ul>\n<p>Dieser Auszug aus der Routine <b>XMLMitUnterelement <\/b>zeigt, wie es funktioniert &#8211; die relevanten Zeilen sind fett gedruckt:<\/p>\n<pre><span class=\"quellcode\">...<\/span>\r\n<span class=\"quellcode\">Dim objElement As IXMLDOMElement<\/span>\r\nSet objXML = New DOMDocument\r\nAddFormat objXML, eEncodingISO8859_1\r\nSet objRoot = objXML.createElement(&quot;root&quot;)\r\n<span class=\"quellcode\">Set objElement = objXML.createElement(&quot;element&quot;)<\/span>\r\n<span class=\"quellcode\">objRoot.appendChild objElement<\/span>\r\nobjXML.appendChild objRoot\r\n...<\/pre>\n<p><!--30percent--><\/p>\n<p>Ob Sie <b>objRoot <\/b>oder <b>objElement <\/b>zuerst erzeugen, spielt ebensowenig eine Rolle, wie die Reihenfolge des Anh&auml;ngens an das jeweils &uuml;bergeordnete Element.<\/p>\n<table>\n<tbody>\n<tr>\n<td>\n<p class=\"kastentabelleheader\">Beispiel: Unterelement mit Wert<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p class=\"quellcodekasten\">&lt;xml version=&quot;1.0&quot; encoding=&quot;iso-8859-1&quot; &gt; <\/p>\n<p class=\"quellcodekasten\">&lt;root&gt;<\/p>\n<p class=\"quellcodekasten\">    &lt;element&gt;Inhalt&lt;\/element&gt;<\/p>\n<p class=\"quellcodekasten\">&lt;\/root&gt;<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Das F&uuml;llen des Elements mit dem Wert <b>Inhalt <\/b>erfolgt ganz einfach &uuml;ber die Zuweisung der Zeichenkette an die <b>Text<\/b>-Eigenschaft der Element-Variablen (Ausschnitt aus <b>XMLUnterelementMitInhalt<\/b>):<\/p>\n<pre>...\r\nSet objElement = objXML.createElement(&quot;Element&quot;)\r\n<span class=\"quellcode\">objElement.Text = &quot;Wert&quot;<\/span>\r\nobjRoot.appendChild objElement\r\nobjXML.appendChild objRoot\r\n...<\/pre>\n<table>\n<tbody>\n<tr>\n<td>\n<p class=\"kastentabelleheader\">Beispiel: Unterelement mit Wert und <br \/>Attribut<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p class=\"quellcodekasten\">&lt;xml version=&quot;1.0&quot; encoding=&quot;iso-8859-1&quot; &gt; <\/p>\n<p class=\"quellcodekasten\">&lt;root&gt;<\/p>\n<p class=\"quellcodekasten\">    &lt;element id=&quot;1&quot;&gt;Inhalt&lt;\/element&gt;<\/p>\n<p class=\"quellcodekasten\">&lt;\/root&gt;<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Ein Attribut f&uuml;gen Sie einem Element mit der Methode <b>setAttribute<\/b> hinzu, das gleichzeitig den Namen des Attributs sowie seinen Wert als Parameter erwartet (siehe Prozedur <b>XMLInhaltUndAttribut<\/b>):<\/p>\n<pre>...\r\nSet objElement = objXML.createElement(&quot;Element&quot;)\r\nobjElement.Text = &quot;Wert&quot;\r\nobjElement.setAttribute &quot;id&quot;, 1\r\nobjRoot.appendChild objElement\r\n...<\/pre>\n<p>Wof&uuml;r sollten Sie Attribute &uuml;berhaupt verwenden Die Daten einer Datenbank etwa lie&szlig;en sich auch ohne Attribute hierarchisch speichern. Manchmal aber gibt es vielleicht Zusatzinformationen: Wenn Sie beispielsweise W&auml;hrungswerte haben, m&ouml;chten Sie vielleicht zus&auml;tzlich die W&auml;hrung abspeichern &#8211; da hierf&uuml;r aber auch in Datenbanktabellen in der Regel kein eigenes Feld vorgesehen ist, schreiben Sie diese Informationen wie folgt in das Attribut:<\/p>\n<pre>&lt;stundensatz waehrung=&quot;Euro&quot;&gt;80&lt;\/stundensatz&gt;<\/pre>\n<table>\n<tbody>\n<tr>\n<td>\n<p class=\"kastentabelleheader\">Beispiel: Weitere Verschachtelungen<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p class=\"quellcodekasten\">&lt;xml version=&quot;1.0&quot; encoding=&quot;iso-8859-1&quot; &gt; <\/p>\n<p class=\"quellcodekasten\">&lt;root&gt;<\/p>\n<p class=\"quellcodekasten\">    &lt;element&gt;<\/p>\n<p class=\"quellcodekasten\">        &lt;subelement&gt;Wert&lt;\/subelement&gt;<\/p>\n<p class=\"quellcodekasten\">    &lt;\/element&gt;<\/p>\n<p class=\"quellcodekasten\">&lt;\/root&gt;<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Weitere Verschachtelungen erfolgen jeweils durch Erzeugen des Elements mit <b>createElement <\/b>und anschlie&szlig;endes Anh&auml;ngen des &uuml;bergeordneten Elements. Abgesehen davon, dass das &uuml;bergeordnete Element schon vorhanden sein muss, spielt die Reihenfolge keine Rolle (siehe Prozedur <b>XMLVerschachtelt<\/b>):<\/p>\n<pre>Dim objSubelement As IXMLDOMElement\r\n...\r\nSet objSubelement = _<br \/>    objXML.createElement(&quot;subelement&quot;)\r\nobjSubelement.Text = &quot;Wert&quot;\r\nobjElement.appendChild objSubelement<\/pre>\n<table>\n<tbody>\n<tr>\n<td>\n<p class=\"kastentabelleheader\">Beispiel: Kommentare <\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p class=\"quellcodekasten\">&lt;xml version=&quot;1.0&quot;&gt;<\/p>\n<p class=\"quellcodekasten\">&lt;root&gt;<\/p>\n<p class=\"quellcodekasten\">    &lt;!&#8211;Dies ist ein Kommentar.&#8211;&gt;<\/p>\n<p class=\"quellcodekasten\">    &lt;element\/&gt;<\/p>\n<p class=\"quellcodekasten\">&lt;\/root&gt;<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Einen Kommentar f&uuml;gen Sie prinzipiell wie ein normales Element ein: Sie erzeugen ein Objekt des Typs <b>IXMLDOMComment<\/b>, geben dabei den Text an und f&uuml;gen es in das gew&uuml;nschte &uuml;bergeordnete Element ein.<\/p>\n<p>Je nachdem, ob es vor oder hinter einem Element erscheinen soll, variieren Sie die Einf&uuml;ge-Reihenfolge (siehe Prozedur <b>XMLKommentar<\/b>):<\/p>\n<pre>...\r\nDim objKommentar As IXMLDOMComment\r\n...\r\nSet objKommentar = _<br \/>    objXML.createComment _<br \/>    (&quot;Dies ist ein Kommentar.&quot;)\r\nobjRoot.appendChild objKommentar\r\n...<\/pre>\n<table>\n<tbody>\n<tr>\n<td>\n<p class=\"kastentabelleheader\">Beispiel: XML-Entities<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p class=\"quellcodekasten\">&lt;xml version=&quot;1.0&quot;&gt;<\/p>\n<p class=\"quellcodekasten\">&lt;root&gt;<\/p>\n<p class=\"quellcodekasten\">    &lt;element&gt;&lt;&quot;Entity&quot;&gt;&lt;\/element&gt;<\/p>\n<p class=\"quellcodekasten\">&lt;\/root&gt;<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Sonderzeichen wie &lt;, &gt;, &amp;, &apos; und &quot; sind in XML gesch&uuml;tzt und m&uuml;ssen normalerweise durch so genannte Entity-Referenzen ersetzt werden, die aus dem Kaufmanns-Und (&amp;, auch &quot;Ampersand&quot;), einer g&uuml;ltigen Zeichenfolge und einem Semikolon (;) bestehen: <\/p>\n<ul>\n<li class=\"aufz-hlung\"><span class=\"quellcode\">&amp;:<\/span> <span class=\"quellcode\">&amp;amp;<\/span><\/li>\n<li class=\"aufz-hlung\"><span class=\"quellcode\">&lt;: &amp;lt;<\/span><\/li>\n<li class=\"aufz-hlung\"><span class=\"quellcode\">&gt;: &amp;gt;<\/span><\/li>\n<li class=\"aufz-hlung\"><span class=\"quellcode\">&apos;: &amp;apos;<\/span><\/li>\n<li class=\"aufz-hlung\"><span class=\"quellcode\">&quot;: &amp;quot;<\/span><\/li>\n<\/ul>\n<p>Sie k&ouml;nnen diese Zeichen jedoch als <b>text<\/b>-Eigenschaft zu Elementen hinzuf&uuml;gen, sie werden dann automatisch umgewandelt.<\/p>\n<p>Dies sieht dann im Texteditor so aus:<\/p>\n<pre>&lt;xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;&gt;\r\n&lt;root&gt;&lt;test&gt;&amp;lt;&quot;Entity&quot;&amp;gt;&lt;\/test&gt;&lt;\/root&gt;<\/pre>\n<p>Im HTML-Browser erscheint aber dann alles wie gew&uuml;nscht:<\/p>\n<pre>&lt;xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot; &gt; \r\n&lt;root&gt; \r\n &lt;test&gt;&lt;&quot;Entity&quot;&gt;&lt;\/test&gt; \r\n&lt;\/root&gt;<\/pre>\n<table>\n<tbody>\n<tr>\n<td>\n<p class=\"kastentabelleheader\">Beispiel: Bin&auml;re Daten<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p class=\"quellcodekasten\">&lt;xml version=&quot;1.0&quot;&gt;<\/p>\n<p class=\"quellcodekasten\">&lt;root&gt;<\/p>\n<p class=\"quellcodekasten\">    &lt;binaer xmlns:dt=&quot;urn:schemas-microsoft-<br \/>        com:datatypes&quot; dt:dt=&quot;bin.base64&quot;&gt;<br \/>        FRwvAAIAAAANAA4AFAAhAP\/\/\/\/9CaXRtYXA<br \/>        gSW1hZ2UAUGFpbnQuUGljdHVyZQABBQAAAgAA<br \/>        &#8230;&lt;\/binaer&gt; <\/p>\n<p class=\"quellcodekasten\">&lt;\/root&gt;<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Mitunter enthalten Tabellen bin&auml;re Daten, die ebenfalls in das XML-Dokument geschrieben werden sollen.<\/p>\n<p>Die Prozedur <b>XMLBinaer <\/b>zeigt, wie Sie den Inhalt eines OLE-Feldes in ein XML-Element schreiben &#8211; hier die wichtigsten Ausz&uuml;ge:<\/p>\n<pre>...\r\nSet fld = rst!Abbildung\r\n...\r\nSet objElement = objXML.createElement(&quot;element&quot;)\r\nSelect Case fld.Type\r\n    Case dbLongBinary\r\n        objElement.DataType = &quot;bin.base64&quot;\r\n        objElement.nodeTypedValue = fld.Value\r\n    Case Else\r\n        &apos;...\r\nEnd Select\r\nobjRoot.appendChild objElement\r\n...<\/pre>\n<p>Sie m&uuml;ssen also beim Export von Daten aus Tabellenfeldern pr&uuml;fen, ob das Feld den Datentyp OLE-Feld hat (<b>dbLongBinary<\/b>), und in diesem Fall einen speziellen Wert f&uuml;r den Datentyp angeben. Sie weisen den Inhalt des Feldes auch nicht der <b>text<\/b>-Eigenschaft des Elements zu, sondern der <b>nodeTypedValue<\/b>-Eigenschaft. Elementen des Typs <b>bin.base64<\/b> muss immer ein Byte-Array zugewiesen werden &#8211; der Feldinhalt eines OLE-Feldes ist ein solches.<\/p>\n<table>\n<tbody>\n<tr>\n<td>\n<p class=\"kastentabelleheader\">Beispiel: Weitere Datentypen<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p class=\"quellcodekasten\">&lt;xml version=&quot;1.0&quot;&gt;<\/p>\n<p class=\"quellcodekasten\">&lt;root&gt;<\/p>\n<p class=\"quellcodekasten\"> &lt;janein_text&gt;0&lt;\/janein_text&gt;<\/p>\n<p class=\"quellcodekasten\"> &lt;janein_nodeTypedValue&gt;Falsch<br \/>     &lt;\/janein_nodeTypedValue&gt;<\/p>\n<p class=\"quellcodekasten\">&lt;\/root&gt;<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Bei einigen Datentypen reicht das Speichern als <b>text<\/b>-Element v&ouml;llig aus. Der Inhalt von <b>Ja\/Nein<\/b>-Feldern hingegen zeigt sich beim Speichern zickig und schreibt Ausdr&uuml;cke wie <b>Wahr <\/b>und <b>Falsch <\/b>in das XML-Dokument. Das bereitet beim Einlesen aber mitunter Probleme, weil ja auch <b>True <\/b>oder <b>False <\/b>enthalten sein k&ouml;nnte. Also beugen Sie vor, indem Sie ganz einfach die Eigenschaft <b>nodeTypedValue <\/b>zum F&uuml;llen des Elements verwenden.<\/p>\n<pre>...\r\nSet objElement = _<br \/>    objXML.createElement(&quot;janein_text&quot;)\r\nobjElement.nodeTypedValue = fld.Value\r\nobjRoot.appendChild objElement\r\nSet objElement = _<br \/>    objXML.createElement(&quot;janein_nodeTypedValue&quot;)\r\nobjElement.Text = fld.Value\r\nobjRoot.appendChild objElement\r\n...<\/pre>\n<p><b>Ein Element hier, ein Element da &#8230;<\/b><\/p>\n<p>Die MS XML-Bibliothek bietet nat&uuml;rlich noch viel mehr M&ouml;glichkeiten, um etwa den Wert bestehender XML-Elemente zu ver&auml;ndern oder mitten im Dokument Elemente hinzuzuf&uuml;gen oder zu entfernen. Das ist jedoch kein Thema f&uuml;r diesen Beitrag: Wir wollen ja nur die Werkzeuge vorstellen, die Sie zum Umwandeln der in Ihrer Datenbank enthaltenen Informationen ben&ouml;tigen &#8211; und die sollten Sie normalerweise geradeaus in die XML-Datei schreiben k&ouml;nnen. Anders sieht das beim Auslesen von Daten aus XML-Dokumenten aus: Hier kann es durchaus vorkommen, dass Sie beispielsweise die Daten zweier verkn&uuml;pfter Tabellen in einem XML-Dokument vorfinden und w&auml;hrend des Einlesens etwa von Kundendaten direkt die zu jedem Kunden passenden Projekt-Elemente durchlaufen m&uuml;ssen. Diese und andere Mittel zum Auslesen von XML-Dokumenten stellen die folgenden Abschnitte vor.<\/p>\n<p><b>XML-Dokument aus Datei laden<\/b><\/p>\n<p>Ein als Datei vorliegendes XML-Dokument laden Sie mit den folgenden Zeilen. Diese geben gleich den Inhalt im Direktfenster aus (Prozedur ):<\/p>\n<pre>Dim objXML As DOMDocument\r\nSet objXML = New DOMDocument\r\nobjXML.Load (&quot;c:\\text.xml&quot;)\r\nDebug.Print objXML.xml<\/pre>\n<p>Wichtig ist hier der Unterschied zwischen <b>Load <\/b>und <b>LoadXML<\/b>: Letztere erwartet n&auml;mlich eine Zeichenkette mit dem XML-Dokument. Nicht immer l&auml;uft beim Einlesen alles rund, aber auch hier lassen sich Fehler abfangen:<\/p>\n<pre>With objXML\r\n    If Not .Load(&quot;c:\\suedsturm.xml&quot;) Then\r\n        Debug.Print &quot;Fehler: &quot; _<br \/>            &amp; .parseError.reason;\r\n        Debug.Print &quot;Zeile &quot; &amp; .parseError.Line _<br \/>            &amp; &quot;, Zeichen &quot; &amp; .parseError.linepos\r\n    End If\r\nEnd With<\/pre>\n<p>Diese Routine (siehe Routine <b>XMLFehler<\/b>) liefert eine Fehlermeldung, sollte das Einlesen der Datei nicht erfolgreich sein.<\/p>\n<p><b>Daten abfragen<\/b><\/p>\n<p>Als Beispiel f&uuml;r das Abfragen von Daten verwenden wir einen Export der S&uuml;dsturm-Datenbank, der wie in Bild 2 aussieht (die Beschreibung des Codes, der f&uuml;r einen solchen Export notwendig ist, finden Sie im Beitrag <b>XML: Von Datenbank zu Datenbank<\/b>, Shortlink 524). Die folgenden Anweisungen (vollst&auml;ndige Version: Prozedur <b>XMLErsteEbeneAuslesen<\/b>) weisen zun&auml;chst einem <b>IXMLDOMElement<\/b>-Objekt das <b>documentElement <\/b>des XML-Dokuments zu &#8211; das ist der Hauptknoten, von dem es je Dokument nur einen geben kann. Sie k&ouml;nnten auch die <b>childNodes<\/b>-Auflistung des XML-Dokuments durchlaufen &#8211; dann w&uuml;rde beispielsweise die Prologzeile ebenfalls ber&uuml;cksichtigt, was allerdings selten gew&uuml;nscht ist.<\/p>\n<div class=\"image\">\n    <img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2007_05\/XMLDomBasics-web-images\/abb002_opt.jpeg\" alt=\"abb002.tif\" \/>\n<\/div>\n<div class=\"story\">\n<p><b><span style=\"color:darkgrey\">Bild 2: XML-Version der S&uuml;dsturm-Datenbank<\/span><\/b><\/p>\n<\/div>\n<pre>Set objRoot = .documentElement<\/pre>\n<p>Die <b>length<\/b>-Eigenschaft der <b>childNodes<\/b>-Auflistung entspricht der von VBA-Auflistungen bekannten <b>Count<\/b>-Eigenschaft:<\/p>\n<pre>lngAnzahlElemente = _<br \/>    objRoot.childNodes.length<\/pre>\n<p>Haben Sie damit die Anzahl der Element ermittelt, k&ouml;nnen Sie per <b>For&#8230;Next<\/b>-Schleife die einzelnen Elemente durchlaufen und beispielsweise deren Namen ausgeben:<\/p>\n<pre>For i = 0 To lngAnzahlElemente - 1\r\n    Set objElement = _<br \/>        objRoot.childNodes.Item(i)\r\n    Debug.Print _<br \/>        i &amp; &quot;: &quot; &amp; objElement.nodeName\r\nNext i<\/pre>\n<p>Von hier aus k&ouml;nnen Sie weitere Ebenen und auch die jeweils enthaltenen Werte der Elemente erforschen. Dazu brauchen Sie nur mit je einem <b>IXMLDOMElement<\/b>-Objekt die jeweilige <b>childNodes<\/b>-Auflistung der Elemente der aktuellen Ebene zu durchlaufen. Andere Eigenschaften wie Attribute lassen sich je Element ganz einfach &uuml;ber die <b>Attributes<\/b>-Auflistung auslesen:<\/p>\n<pre>For j = 0 To objElement.Attributes.length - 1\r\n    Debug.Print _<br \/>        objElement.Attributes.Item(j).baseName\r\n    Debug.Print _<br \/>        objElement.Attributes.Item(j).Text\r\nNext j<\/pre>\n<p class=\"zwischen-berschriftnachquellcode\">Gezielte Abfrage<\/p>\n<p>Wenn Sie Daten etwa aus dem in Bild 2 dargestellten XML-Dokument auslesen m&ouml;chten, brauchen Sie sich nicht besonders tief in die Hierarchie dieses Dokuments einzuarbeiten. Es gibt aber nat&uuml;rlich auch XML-Dokumente mit weiteren Ebenen, und manchmal m&ouml;chte man vielleicht auch in Dokumenten wie dem oben genannten gezielt Daten ermitteln, ohne endlose Schleifen zu durchlaufen.<\/p>\n<p>F&uuml;r diesen Fall gibt es eine spezielle Notation, mit der Sie Elemente mit bestimmten Eigenschaften referenzieren k&ouml;nnen. Das folgende Beispiel zeigt etwa, wie Sie alle Namen von Kategorien der S&uuml;dsturm-Datenbank auflisten k&ouml;nnen. Dazu verwenden Sie die <b>selectNodes<\/b>-Anweisung, mit der Sie &#8211; vom Bezugselement aus, hier also dem Root-Element &#8211; den Pfad in Form der Namen der in der Hierarchie liegenden Elemente angeben:<\/p>\n<pre>Dim objKategorien As IXMLDOMNodeList\r\n...\r\nSet objKategorien = _<br \/>    objRoot.selectNodes _<br \/>    (&quot;tblKategorien\/Kategoriename&quot;)\r\nFor i = 0 To objKategorien.length - 1\r\n    Debug.Print objKategorien.Item(i).Text\r\nNext i<\/pre>\n<p>Das Ergebnis landet in einem <b>IXMLDOMNodeList<\/b>-Objekt, das wie die &uuml;brigen Auflistungen des DOM durchlaufen werden k&ouml;nnen. Der f&uuml;r <b>selectNodes <\/b>angegebene Parameter ist ein so genannter <b>XPath<\/b>-Ausdruck. <b>XPath <\/b>ist die Abfragesprache f&uuml;r XML-Dokumente. Der Ausdruck dieses Beispiels entspricht etwa dieser SQL-Select-Anweisung:<\/p>\n<pre>SELECT Kategoriename FROM tblKategorien<\/pre>\n<p>Sie k&ouml;nnen auch gezielt einzelne Elemente herausfiltern. Das folgende Beispiel zeigt, wie Sie alle Artikel anzeigen, deren Lagerbestand kleiner als zehn ist (siehe Prozedur <b>XMLArtikelLagerbestand<\/b>):<\/p>\n<pre>Dim objArtikelliste As IXMLDOMNodeList\r\nDim objArtikel As IXMLDOMElement\r\n...\r\nSet objArtikelliste = _<br \/>    objRoot.selectNodes _<br \/>    (&quot;\/\/tblArtikel[Lagerbestand&lt;10]&quot;)\r\nFor Each objArtikel In objArtikelliste\r\n    Debug.Print objArtikel. _<br \/>        selectSingleNode(&quot;Artikelname&quot;).Text, _<br \/>        objArtikel.selectSingleNode _<br \/>        (&quot;Lagerbestand&quot;).Text\r\nNext\r\nEnd With<\/pre>\n<p>Der Ausdruck <b>\/\/tblArtikel[Lagerbestand&lt;10] <\/b>liest dabei alle <b>tblArtikel<\/b>-Elemente des gesamten Dokuments (<b>\/\/<\/b>) ein, die ein Element <b>Lagerbestand <\/b>mit einem Wert kleiner als zehn besitzen. Wenn Lagerbestand nun ein Attribut w&auml;re, s&auml;he der XML-Code beispielsweise so aus:<\/p>\n<pre>&lt;tblArtikel Lagerbestand=7&gt; \r\n    &lt;ArtikelID&gt;1&lt;\/ArtikelID&gt; \r\n    &lt;Artikelname&gt;Chai&lt;\/Artikelname&gt; \r\n    ...\r\n&lt;\/tblArtikel&gt;<\/pre>\n<p>Auf Attribute greifen Sie fast genau so zu wie auf Unterelemente &#8211; Sie brauchen lediglich ein zus&auml;tzliches @-Zeichen:<\/p>\n<pre>\/\/tblArtikel[@Lagerbestand&lt;10]<\/pre>\n<p class=\"zwischen-berschriftnachquellcode\">Einzelne Elemente suchen<\/p>\n<p>Genau wie Sie Element-Listen mit bestimmten Kriterien zusammenstellen k&ouml;nnen, ist dies auch f&uuml;r einzelne Elemente m&ouml;glich. Hier nur ein kurzes Beispiel, das einen Artikel mit dem Artikelnamen <b>Chai <\/b>zur&uuml;ckgibt (siehe Prozedur <b>XMLArtikelChai<\/b>):<\/p>\n<pre>Dim objArtikel As IXMLDOMElement\r\n...\r\nSet objArtikel = _<br \/>    objRoot.selectSingleNode _<br \/>    (&quot;\/\/tblArtikel[Artikelname=&apos;Chai&apos;]&quot;)\r\nDebug.Print _<br \/>    objArtikel.selectSingleNode _<br \/>    (&quot;Artikelname&quot;).Text<\/pre>\n<p class=\"zwischen-berschriftnachquellcode\">Weitere Beispiele<\/p>\n<p>Es w&auml;re m&uuml;&szlig;ig, hier die kompletten M&ouml;glichkeiten von XPath aufzulisten. Wir empfehlen Ihnen aber w&auml;rmstens, sich hierzu die Hilfedatei des MSXML-SDK aus [1] anzusehen. Unter <b>MSXML|XML Standards Reference|XPath Reference|XPath Syntax|XPath Examples <\/b>finden Sie viele Beispielausdr&uuml;cke.<\/p>\n<p><b>Zusammenfassung und Ausblick<\/b><\/p>\n<p>Dieser Beitrag zeigt die grundlegenden Techniken f&uuml;r den Zugriff auf XML-Dokumente. Eine Reihe weiterer Informationen hierzu liefert die Dokumentation zu [1].<\/p>\n<p>Wie das in der Praxis funktioniert, zeigt beispielsweise der Artikel XML: Von Datenbank zu Datenbank (Shortlink ****). Dort erfahren Sie, wie Sie den Inhalt einer Datenbank in eine gleich aufgebaute zweite Datenbank &uuml;bertragen und was es dabei zu beachten gilt.<\/p>\n<p class=\"quellen\">[1] Microsoft Core XML Services (MSXML) 6.0: http:\/\/www.microsoft.com\/downloads\/details.aspxFamilyID=993c0bcf-3bcf-4009-be21-27e85e1857b1&amp;DisplayLang=en, hier die Datei msxml6_SDK.msi herunterladen<\/p>\n<h3>Downloads zu diesem Beitrag<\/h3>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>XML.mdb<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/A3525D49-9C25-427F-BDCB-EF222D9013B6\/aiu_522.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Schaut man sich in Foren und im Web um, so scheint XML im Zusammenhang mit Access und VBA mehr Fragen aufzuwerfen als zu beantworten. In den meisten F&auml;llen dreht es sich um das Problem, wie man per VBA ein XML-Dokument mit bestimmten Elementen und Attributen erzeugt. Die Grundlagen dazu liefert dieser Beitrag genauso wie die zum Auslesen der erzeugten XML-Dokumente.<\/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":[662007,66062007,44000030,44000025],"tags":[],"class_list":["post-55000522","post","type-post","status-publish","format-standard","hentry","category-662007","category-66062007","category-Internet","category-VBA_und_Programmiertechniken"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.9 (Yoast SEO v27.4) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>XML-Dokumente mit VBA erstellen und lesen - Access im Unternehmen<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/access-im-unternehmen.de\/XMLDokumente_mit_VBA_erstellen_und_lesen\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"XML-Dokumente mit VBA erstellen und lesen\" \/>\n<meta property=\"og:description\" content=\"Schaut man sich in Foren und im Web um, so scheint XML im Zusammenhang mit Access und VBA mehr Fragen aufzuwerfen als zu beantworten. In den meisten F&auml;llen dreht es sich um das Problem, wie man per VBA ein XML-Dokument mit bestimmten Elementen und Attributen erzeugt. Die Grundlagen dazu liefert dieser Beitrag genauso wie die zum Auslesen der erzeugten XML-Dokumente.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/XMLDokumente_mit_VBA_erstellen_und_lesen\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2021-02-11T21:18:54+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg08.met.vgwort.de\/na\/da7415f4fecc403b9f3436dc7e7a397f\" \/>\n<meta name=\"author\" content=\"Andr\u00e9 Minhorst\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Andr\u00e9 Minhorst\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"17\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/XMLDokumente_mit_VBA_erstellen_und_lesen\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/XMLDokumente_mit_VBA_erstellen_und_lesen\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"XML-Dokumente mit VBA erstellen und lesen\",\"datePublished\":\"2021-02-11T21:18:54+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/XMLDokumente_mit_VBA_erstellen_und_lesen\\\/\"},\"wordCount\":2660,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/XMLDokumente_mit_VBA_erstellen_und_lesen\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg08.met.vgwort.de\\\/na\\\/da7415f4fecc403b9f3436dc7e7a397f\",\"articleSection\":[\"2007\",\"6\\\/2007\",\"Internet\",\"VBA und Programmiertechniken\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/XMLDokumente_mit_VBA_erstellen_und_lesen\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/XMLDokumente_mit_VBA_erstellen_und_lesen\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/XMLDokumente_mit_VBA_erstellen_und_lesen\\\/\",\"name\":\"XML-Dokumente mit VBA erstellen und lesen - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/XMLDokumente_mit_VBA_erstellen_und_lesen\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/XMLDokumente_mit_VBA_erstellen_und_lesen\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg08.met.vgwort.de\\\/na\\\/da7415f4fecc403b9f3436dc7e7a397f\",\"datePublished\":\"2021-02-11T21:18:54+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/XMLDokumente_mit_VBA_erstellen_und_lesen\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/XMLDokumente_mit_VBA_erstellen_und_lesen\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/XMLDokumente_mit_VBA_erstellen_und_lesen\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg08.met.vgwort.de\\\/na\\\/da7415f4fecc403b9f3436dc7e7a397f\",\"contentUrl\":\"http:\\\/\\\/vg08.met.vgwort.de\\\/na\\\/da7415f4fecc403b9f3436dc7e7a397f\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/XMLDokumente_mit_VBA_erstellen_und_lesen\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"XML-Dokumente mit VBA erstellen und lesen\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\",\"name\":\"Access im Unternehmen\",\"description\":\"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Microsoft Access\",\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/access-im-unternehmen.de\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\",\"name\":\"Andr\u00e9 Minhorst Verlag\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/aiu_wp.png\",\"contentUrl\":\"https:\\\/\\\/access-im-unternehmen.de\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/aiu_wp.png\",\"width\":370,\"height\":111,\"caption\":\"Andr\u00e9 Minhorst Verlag\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\",\"name\":\"Andr\u00e9 Minhorst\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"caption\":\"Andr\u00e9 Minhorst\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"XML-Dokumente mit VBA erstellen und lesen - Access im Unternehmen","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/access-im-unternehmen.de\/XMLDokumente_mit_VBA_erstellen_und_lesen\/","og_locale":"de_DE","og_type":"article","og_title":"XML-Dokumente mit VBA erstellen und lesen","og_description":"Schaut man sich in Foren und im Web um, so scheint XML im Zusammenhang mit Access und VBA mehr Fragen aufzuwerfen als zu beantworten. In den meisten F&auml;llen dreht es sich um das Problem, wie man per VBA ein XML-Dokument mit bestimmten Elementen und Attributen erzeugt. Die Grundlagen dazu liefert dieser Beitrag genauso wie die zum Auslesen der erzeugten XML-Dokumente.","og_url":"https:\/\/access-im-unternehmen.de\/XMLDokumente_mit_VBA_erstellen_und_lesen\/","og_site_name":"Access im Unternehmen","article_published_time":"2021-02-11T21:18:54+00:00","og_image":[{"url":"http:\/\/vg08.met.vgwort.de\/na\/da7415f4fecc403b9f3436dc7e7a397f","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"17\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/XMLDokumente_mit_VBA_erstellen_und_lesen\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/XMLDokumente_mit_VBA_erstellen_und_lesen\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"XML-Dokumente mit VBA erstellen und lesen","datePublished":"2021-02-11T21:18:54+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/XMLDokumente_mit_VBA_erstellen_und_lesen\/"},"wordCount":2660,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/XMLDokumente_mit_VBA_erstellen_und_lesen\/#primaryimage"},"thumbnailUrl":"http:\/\/vg08.met.vgwort.de\/na\/da7415f4fecc403b9f3436dc7e7a397f","articleSection":["2007","6\/2007","Internet","VBA und Programmiertechniken"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/XMLDokumente_mit_VBA_erstellen_und_lesen\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/XMLDokumente_mit_VBA_erstellen_und_lesen\/","url":"https:\/\/access-im-unternehmen.de\/XMLDokumente_mit_VBA_erstellen_und_lesen\/","name":"XML-Dokumente mit VBA erstellen und lesen - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/XMLDokumente_mit_VBA_erstellen_und_lesen\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/XMLDokumente_mit_VBA_erstellen_und_lesen\/#primaryimage"},"thumbnailUrl":"http:\/\/vg08.met.vgwort.de\/na\/da7415f4fecc403b9f3436dc7e7a397f","datePublished":"2021-02-11T21:18:54+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/XMLDokumente_mit_VBA_erstellen_und_lesen\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/XMLDokumente_mit_VBA_erstellen_und_lesen\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/XMLDokumente_mit_VBA_erstellen_und_lesen\/#primaryimage","url":"http:\/\/vg08.met.vgwort.de\/na\/da7415f4fecc403b9f3436dc7e7a397f","contentUrl":"http:\/\/vg08.met.vgwort.de\/na\/da7415f4fecc403b9f3436dc7e7a397f"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/XMLDokumente_mit_VBA_erstellen_und_lesen\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"XML-Dokumente mit VBA erstellen und lesen"}]},{"@type":"WebSite","@id":"https:\/\/access-im-unternehmen.de\/#website","url":"https:\/\/access-im-unternehmen.de\/","name":"Access im Unternehmen","description":"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Microsoft Access","publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/access-im-unternehmen.de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/access-im-unternehmen.de\/#organization","name":"Andr\u00e9 Minhorst Verlag","url":"https:\/\/access-im-unternehmen.de\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/logo\/image\/","url":"https:\/\/access-im-unternehmen.de\/wp-content\/uploads\/2019\/09\/aiu_wp.png","contentUrl":"https:\/\/access-im-unternehmen.de\/wp-content\/uploads\/2019\/09\/aiu_wp.png","width":370,"height":111,"caption":"Andr\u00e9 Minhorst Verlag"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f","name":"Andr\u00e9 Minhorst","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","caption":"Andr\u00e9 Minhorst"}}]}},"_links":{"self":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000522","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/comments?post=55000522"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000522\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55000522"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55000522"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55000522"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}