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

XML mit VBA lesen: Nodes selektieren

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

Im Artikel “XML-Dokumente mit VBA lesen” haben wir die grundlegenden Befehle erläutert, mit denen Sie per VBA auf den Inhalt von XML-Dokumenten zugreifen können. Wir sind dort bereits kurz auf die beiden Funktionen SelectNodes und SelectSingleNode eingegangen, mit denen Sie einen Verweis auf eine Auflistung mehrerer Node-Elemente oder eines einzelnen Elements holen können. Dabei geben Sie per Parameter den Pfad zu den gesuchten Node-Elementen oder die Attribute der Elemente auf diesem Pfad an. Im vorliegenden Artikel sehen wir uns im Detail an, wie Sie solche Suchkriterien formulieren können.

Beispieldatenbank

Die Beispiele dieses Artikels finden Sie in der Datenbank 1905_XML-LesenVBA.accdb.

Beispieldokument

Wir nutzen wieder das Beispieldokument aus dem eingangs erwähnten Artikel, das alle gängigen Eigenschaften und Pfade für Beispiele zum Auffinden von Elementen liefert (siehe Listing 1).

<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

Voraussetzungen

Wenn Sie die Beispiele dieses Artikels nachvollziehen wollen, verwenden Sie entweder die Beispieldatenbank oder eine eigene Datenbank. Dieser fügen Sie dann einen Verweis auf die Bibliothek Microsoft XML, v6.0 hinzu.

Schnelles Einlesen des XML-Dokuments

Da wir das XML-Dokument aus dem Listing in allen folgenden Beispielprozeduren einlesen müssen, lagern wir die dazu notwendigen Anweisungen in eine eigene Funktion namens DokumentEinlesen aus.

Diese finden Sie in Listing 2. Alle Aufgaben dieser Funktion haben wir bereits im Artikel XML-Dokumente mit VBA lesen erläutert.

<font color=blue>Public Function </font>DokumentEinlesen()<font color=blue> As </font>MSXML2.DOMDocument60
      <font color=blue>Dim </font>strDatei<font color=blue> As String</font>
      <font color=blue>Dim </font>objXML<font color=blue> As </font>MSXML2.DOMDocument60
      strDatei = CurrentProject.Path & "\PurchaseOrder.xml"
      <font color=blue>Set</font> objXML = <font color=blue>New</font> MSXML2.DOMDocument60
      objXML.Load strDatei
      <font color=blue>If </font><font color=blue>Not</font> <font color=blue>Len</font>(objXML.XML) = 0<font color=blue> Then</font>
          <font color=blue>Set</font> DokumentEinlesen = objXML
      <font color=blue>Else</font>
          <font color=blue>MsgBox</font> "Fehler " & objXML.parseError.errorCode & ": " & objXML.parseError.reason
      <font color=blue>End If</font>
End Function 

Listing 2: Funktion zum Einlesen des Inhalts von XML-Dokumenten

In den folgenden Prozeduren füllen wir einfach eine MSXML2.DOMDocument60-Variable mit dem Ergebnis der Funktion DokumentEinlesen.

XPath

Die Parameter, die wir den beiden Funktionen SelectNodes oder SelectSingleNode übergeben, werden in einer eigenen Sprache formuliert – in XPath.

Wir schauen uns zunächst an, welche Daten uns die beiden Funktionen zurückliefern, wenn wir diesen gar keine Parameter übergeben.

selectSingleNode, einfache Variante

Die Funktion selectSingleNode funktioniert, wie wir schnell herausfinden, schon einmal nicht ohne Parameter. Sie erwartet mindestens die Angabe des Schrägstrichs als Zeichenkette:

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