window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-TCJTE9L38H');

XML-Dokumente mit VBA lesen

Lies diesen Artikel und viele weitere mit einem kostenlosen, einwöchigen Testzugang.

Wir haben nun in einigen Artikeln beschrieben, welche Möglichkeiten die Bordmittel von Access für das Lesen und Schreiben von XML-Dokumenten bieten. Richtig flexibel ist das ganze natürlich nicht beziehungsweise nur, wenn Sie mit XSL nachhelfen. Wenn es beim Einlesen von XML-Dokumenten richtig individuell werden soll, können Sie aber immer noch mit VBA arbeiten. Dazu benötigen Sie nur einen Verweis auf die Objektbibliothek mit den Befehlen zum Bearbeiten von XML-Dokumenten – und das Know-how aus diesem Artikel.

Beispieldatenbank

Die Beispiele dieses Artikels finden Sie in der Datenbank 1904_XMLLesenVBA.accdb.

Voraussetzungen

Um per VBA auf XML-Dokumente zuzugreifen, brauchen Sie imgrunde noch nicht einmal eine spezielle Bibliothek. XML-Dokumente sind ja auch nichts anderes als einfache Textdateien, nur das ihre Inhalte durch die XML-Auszeichnungen auf bestimmte Art strukturiert sind.

Im Notfall können Sie sich also auch mit der Open-Anweisung und den Zeichenkettenfunktionen von VBA behelfen. Aber wir wollen es natürlich schon etwas komfortabler haben und nutzen daher die Bibliothek Microsoft XML, 6.0.

Diese fügen Sie im VBA-Editor über den Menüeintrag Extras|Verweise und den dann erscheinenden Dialog Verweise wie in Bild 1 hinzu.

Verweis auf die XML-Bibliothek

Bild 1: Verweis auf die XML-Bibliothek

Wenn Sie nun mit der Schaltfläche F2 den Objektkatalog öffnen, können Sie nach der Auswahl des Eintrags MSXML2 oben im Kombinationsfeld alle Elemente dieser Bibliothek einsehen (siehe Bild 2).

Objektkatalog von VBA

Bild 2: Objektkatalog von VBA

Beispieldokument

Wir wollen die Daten aus einem XML-Dokument mit einer Bestellung als Beispiel verwenden, das Sie auch auf der folgenden Microsoftseite finden können – für den Fall, dass Sie mit weiteren Beispieldokumenten experimentieren wollen:

https://docs.microsoft.com/de-de/dotnet/visual-basic/programming-guide/concepts/linq/sample-xml-documents-linq-to-xml

Das Dokument sieht wie in Listing 1 aus. Es enthält genau eine Bestellung, die im Element PurchaseOrder enthalten ist. Das Hauptelement enthält in zwei Attributen die Bestellnummer und das Bestelldatum.

<xml version="1.0">  
<PurchaseOrder PurchaseOrderNumber="99503" OrderDate="1999-10-20">  
   <Address Type="Shipping">  
     <Name>Ellen Adams</Name>  
     <Street>123 Maple Street</Street>  
     <City>Mill Valley</City>  
     <State>CA</State>  
     <Zip>10999</Zip>  
     <Country>USA</Country>  
   </Address>  
   <Address Type="Billing">  
     <Name>Tai Yee</Name>  
     <Street>8 Oak Avenue</Street>  
     <City>Old Town</City>  
     <State>PA</State>  
     <Zip>95819</Zip>  
     <Country>USA</Country>  
   </Address>  
   <DeliveryNotes>Please leave packages in shed by driveway.</DeliveryNotes>  
   <Items>  
     <Item PartNumber="872-AA">  
       <ProductName>Lawnmower</ProductName>  
       <Quantity>1</Quantity>  
       <USPrice>148.95</USPrice>  
       <Comment>Confirm this is electric</Comment>  
     </Item>  
     <Item PartNumber="926-AA">  
       <ProductName>Baby Monitor</ProductName>  
       <Quantity>2</Quantity>  
       <USPrice>39.98</USPrice>  
       <ShipDate>1999-05-21</ShipDate>  
     </Item>  
   </Items>  
 

Listing 1: Inhalt eines XML-Dokuments mit einer Bestellung

Darunter finden Sie die Liefer- und die Rechnungsadresse jeweils in Address-Elementen mit entsprechenden Unterelementen.

Ob es sich um eine Liefer- oder Bestelladresse handelt, entnehmen Sie dem Attribut Type des Address-Elements.

Darunter folgen DeliveryNotes als eigenes Element sowie eine Auflistung namens Items mit einigen Item-Elementen, welche die eigentlichen Bestellpositionen ausmachen. In den folgenden Abschnitten zeigen wir, wie Sie die dort enthaltenen Informationen per VBA und mithilfe der XML-Bibliothek auslesen können.

Die DOMDocument-Klasse

Um auf den Inhalt eines Dokuments zuzugreifen, wollen wir dieses zunächst referenzieren. Dazu gibt es genau eine geeignete Klasse, nämlich DOMDocument60.

Diese deklarieren wir mit der Variablen objXML, danach instanzieren wir ein neues Objekt auf Basis dieser Klasse mit dem New-Schlüsselwort.

Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...

Testzugang

eine Woche kostenlosen Zugriff auf diesen und mehr als 1.000 weitere Artikel

diesen und alle anderen Artikel mit dem Jahresabo

Schreibe einen Kommentar