Zur Hauptseite ... Zum Onlinearchiv ... Zum Abonnement ... Zum Newsletter ... Zu den Tools ... Zum Impressum ... Zum Login ...

Achtung: Dies ist nicht der vollständige Artikel, sondern nur ein paar Seiten davon. Wenn Sie hier nicht erfahren, was Sie wissen möchten, finden Sie am Ende Informationen darüber, wie Sie den ganzen Artikel lesen können.

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

Gedrucktes Heft

Diesen Beitrag finden Sie in Ausgabe 6/2007.

Unser Angebot für Sie!

Lesen Sie diesen Beitrag und 500 andere sofort im Onlinearchiv, und erhalten Sie alle zwei Monate brandheißes Access-Know-how auf 72 gedruckten Seiten! Plus attraktive Präsente, zum Beispiel das bald erscheinende Buch 'Access 2010 - Das Grundlagenbuch für Entwickler'!

Diesen Beitrag twittern

Zusammenfassung

Erhalten Sie einen Überblick über die für das Zusammenstellen und Auslesen von XML-Dokumenten nötigen Techniken.

Techniken

XML-DOM, XPath, VBA

Voraussetzungen

Access 2000 und höher, MSXML 3.0

Beispieldateien

XML.mdb

Shortlink

522

XML-Dokumente mit VBA erstellen und lesen

André Minhorst, Duisburg

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ä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.

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.

Dass dieses Thema tatsächlich gefragt ist, zeigt die Zugriffsstatistik der Know-how-Beiträge von www.access-im-unternehmen.de: Hier liegen die vier Artikel zum Thema XML meistenteils unter den Top Ten der am meisten abgerufenen Seiten.

XML-Dokument als Zeichenkette

Die einfachste Variante, um ein XML-Dokument zu erstellen, sind die herkömmlichen Text-Funktionen von VBA. Ein Beispiel liefern die folgenden Zeilen. Sie erstellen ein XML-Dokument, wie es in Abb. 1 abgebildet ist:

abb001.tif

Abb. 1: Ein einfaches XML-Dokument

Dim str As String

str = "<?xml version='1.0' encoding='iso-8859-1'?>" & vbCrLf

str = str & "<Rootelement>"

str = str & "<Element>"

str = str & "Text des Elements"

str = str & "</Element"

str = str & "</Rootelement>"

Open "c:\text.xml" For Output As #1

Print #1, str

Close #1

Dabei stellen Sie die einzelnen Elemente des Dokuments Stück für Stück zu einer Zeichenkette zusammen und speichern diese anschließ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ünschten Feldinhalten darin unterzubringen.

XML-DOM

Selbstverständlich ist das der am wenigsten elegante Weg und er ist zudem fehleranfällig. Besser funktioniert es, wenn Sie die für solche Zwecke vorgesehene XML-Bibliothek von Microsoft verwenden, die beispielsweise den Zugriff auf die einzelnen Elemente eines XML-Dokuments bietet - und zwar über das Document Object Model (DOM). Um dieses einzusetzen, brauchen Sie einen Verweis auf die Bibliothek Microsoft XML, vx.y. Sie werden eine ganze Reihe von Versionen dieser Bibliothek in der Liste vorfinden, von denen die älteste (v2.6) für die nachfolgenden Beispiele ausreicht. Jedes XML-Dokument enthä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:

<?xml version="1.0"?>

Enthalten die Elemente Umlaute oder sonstige Sonderzeichen, empfiehlt sich die Angabe einer passenden Kodierung. Folgendes kleine Dokument würde beispielsweise im Internet Explorer einen Fehler auslösen:

<?xml version='1.0'?>

<root>äöü</root>

Durch Hinzufügen eines weiteren Attributs zur ersten Zeile beheben Sie den Fehler:

<?xml version="1.0" encoding="iso-8859-1" ?>

<Root>äöü</Root>

Die Kodierung iso-8859-1 sorgt dafür, dass Sie Umlaute sowie andere Sonderzeichen im Dokument verwenden können, ohne dass Sie diese kodieren müssen - dann müssten Sie nämlich beispielsweise &#228; für den Buchstaben ä schreiben.

XML erzeugen "by example"

Genug der Vorrede: Im Folgenden finden Sie Beispiele für verschiedene XML-Dokumente (jeweils im Kasten) und die passenden VBA-Anweisungen.

Beispiel: Einfaches XML-Dokument mit
Root-Element

<?xml version="1.0" encoding="iso-8859-1" ?>

<root />

Dies ist fast das einfachste XML-Dokument, das Sie erzeugen können - es beinhaltet lediglich ein Element namens root (XML-Dokumente ohne ein einziges Element sind nicht gültig). Sie erzeugen es beispielsweise mit den folgenden Anweisungen:

Dim objXML As DOMDocument

Set objXML = New DOMDocument

objXML.loadXML "<?xml version='1.0'
    encoding='iso-8859-1'?><Rootelement/>"

'objXML.Save "c:\text.xml"

Das Problem hierbei ist, dass Sie den Inhalt der ersten Zeile von Hand zusammenschreiben müssen, was zu Fehlern führen könnte - beispielsweise, weil die Attribute nicht in der vorgeschriebenen Reihenfolge vorliegen.

Besser macht es die folgende, aber längere Variante, die das gleiche Ergebnis liefert:

Dim objXML As DOMDocument

Dim objRoot As IXMLDOMElement

Dim objPI As IXMLDOMProcessingInstruction

Set objXML = New DOMDocument

Set objPI = _
    objXML.createProcessingInstruction("xml", _
    "version='1.0' encoding='iso-8859-1'")

Set objRoot = objXML.createElement("root")

objXML.appendChild objPI

objXML.appendChild objRoot

objXML.Save "c:\text.xml"

Das sieht schon recht kompliziert aus, daher eine kurze Erläuterung: objXML erhält zunächst ein neues, leeres XML-Dokument, noch ohne physische Entsprechung in Form einer Datei auf der Festplatte. Die Processing Instruction objPI, die zum Angeben von Verarbeitungsinformationen wird dann mithilfe der Methode createProcessingInstruction zusammengesetzt.

Das Root-Element hat den Typ IXMLDOMElement - genau wie alle anderen Elemente, die Sie in den weiteren Beispielen hinzufügen werden. Beide Elemente, objPI und objRoot, fügen Sie dem XML-Dokument objXML in genau dieser Reihenfolge mit der appendChild-Methode hinzu.

Zusammen mit der Hilfsfunktion AddFormat aus dem Kasten Prolog schreiben brauchen Sie nur noch die folgenden Zeilen:

Public Sub XMLMitKodierungUndRootelement_III()

    Dim objXML As DOMDocument

    Dim objRoot As IXMLDOMElement

    Set objXML = New DOMDocument

    AddFormat objXML, eEncodingISO8859_1

    Set objRoot = objXML.createElement("root")

    objXML.appendChild objRoot

    Debug.Print objXML.xml

    objXML.Save "c:\text.xml"

End Sub

Prolog schreiben

Der Prolog eines XML-Dokuments enthält eine erste Zeile, die eine XML-Datei als solche kennzeichnet und weitere Informationen wie die Kodierung und die Version liefert. Zusätzlich kann der Prolog weitere Informationen enthalten, die hier aber zunächst außer Acht bleiben sollen. Die folgende Funktion fügt dem übergebenen, zu diesem Zeitpunkt noch leeren XML-Dokument die besagte erste Zeile hinzu. Die Kodierung kann per Parameter übergeben werden, der Standardwert ist ISO-8859-1.

Public Function AddFormat(objXML As DOMDocument, intEncoding As eEncoding)

    Dim objPI As IXMLDOMProcessingInstruction

    Dim strEncoding As String

    Select Case intEncoding

        Case eEncodingUTF8

            strEncoding = "utf-8"

        Case eEncodingUTF16

            strEncoding = "utf-16"

        Case eEncodingISO8859_1

            strEncoding = "iso-8859-1"

    End Select

    Set objPI = objXML.createProcessingInstruction("xml", "version='1.0' encoding='" _
        & strEncoding & "'")

    objXML.appendChild objPI

End Function

Die folgende Enumeration liefert die Elemente für die in der Routine verwendete Variable des Typs eEncoding für UTF-8, UTF-16 und ISO-8859-1:

Public Enum eEncoding

    eEncodingUTF8 = 1

    eEncodingUTF16 = 2

    eEncodingISO8859_1 = 3

End Enum

Im Übrigen dürfen Sie sich nicht durch die Ausgabe im Direktfenster irritieren lassen, die die Kodierung vermissen lässt - in der gespeicherten Version ist diese vorhanden.

Beispiel: Einfaches XML-Dokument mit
Root-Element und einem Unterelement

<?xml version="1.0" encoding="iso-8859-1" ?>

<root>

    <element />

</root>

Wenn Sie unterhalb des Root-Elements ein weiteres Element einfügen möchten - hier mit dem Namen element -, brauchen Sie zwei Schritte:

  • Erzeugen des neuen Elements mit der createElement-Methode und
  • Anhängen des Elements an das gewünschte übergeordnete Element, hier root.

Dieser Auszug aus der Routine XMLMitUnterelement zeigt, wie es funktioniert - die relevanten Zeilen sind fett gedruckt:

Sie haben das Ende des frei verfügbaren Teils des Artikels erreicht. Lesen Sie weiter, um zu erfahren, wie Sie den vollständigen Artikel lesen und auf viele hundert weitere Artikel zugreifen können.

Sind Sie Abonnent?Jetzt einloggen ...
 

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

© 2003-2015 André Minhorst Alle Rechte vorbehalten.