BEISPIEL
Attribute oder Element
So manchem wird sich beim Betrachten des obigen XML-Dokuments (Abbildung 12.31) die Frage stellen,
ob die gewählte Struktur überhaupt effizient ist. Bisher haben wir alle Informationen ausnahmslos als
Elemente abgebildet. Doch ist dies auch der richtige Weg?
Enthält ein Element weitere hierarchisch angeordnete Elemente ist die Verwendung sicher notwendig
(Kontinent Land). Die Detailinformation für Fläche und Einwohnerzahl dürfte sich jedoch als Attribut
wesentlich platzsparender unterbringen lassen.
Erstellen von Attributen
Im folgenden Beispiel möchten wir die Informationen von Fläche und Einwohnerzahl als Attribute in die
XML-Daten schreiben. Dazu bauen wir auf die Datei Test6.xml auf.
Erstellen von Attributen
Sub XML_Versuch_7_Attribute()
Dim xmlDoc As DOMDocument30
Dim root As IXMLDOMElement
Dim node As IXMLDOMNode
Dim att As IXMLDOMAttribute
Laden des Basis-Dokuments:
Set xmlDoc = New DOMDocument30
xmlDoc.Load ("c:\Test6.xml")
Set root = xmlDoc.documentElement
Zunächst bearbeiten wir das Element »Deutschland«:
Set node = root.selectSingleNode("EUROPA/Deutschland")
Variante 1, ein Attribut zu definieren und zu parametrieren:
Set att = xmlDoc.createAttribute("Fläche")
att.Value = 356854
node.Attributes.setNamedItem att
Und hier eine etwas kürzere Variante:
node.Attributes.setNamedItem xmlDoc.createAttribute("Einwohner")
node.Attributes.getNamedItem("Einwohner").nodeValue = 80767600
Das Gleiche für »Frankreich«:
Set node = root.selectSingleNode("EUROPA/Frankreich")
node.Attributes.setNamedItem xmlDoc.createAttribute("Fläche")
node.Attributes.setNamedItem xmlDoc.createAttribute("Einwohner")
node.Attributes.getNamedItem("Fläche").nodeValue = 543965
node.Attributes.getNamedItem("Einwohner").nodeValue = 57800000
783
XML-Verarbeitung mit dem DOM
BEISPIEL
Kapitel 12: XML in Theorie und Praxis
Auch das Element »EUROPA« enthält noch zwei überflüssige Elemente, die wir in Attribute umwandeln wol-
len:
Set node = root.selectSingleNode("EUROPA")
Neue Attribute definieren:
node.Attributes.setNamedItem xmlDoc.createAttribute("Fläche")
node.Attributes.setNamedItem xmlDoc.createAttribute("Einwohner")
Die Werte aus den Elementen in die Attribute kopieren:
node.Attributes.getNamedItem("Fläche").nodeValue = root.selectSingleNode("EUROPA/Fläche").Text
node.Attributes.getNamedItem("Einwohner").nodeValue = root.selectSingleNode("EUROPA/Einwohner").Text
Die überflüssigen Elemente löschen:
root.selectSingleNode("EUROPA").removeChild root.selectSingleNode("EUROPA/Fläche")
root.selectSingleNode("EUROPA").removeChild root.selectSingleNode("EUROPA/Einwohner")
Speichern:
xmlDoc.Save ("c:\Test7_Attribute.xml")
End Sub
So sieht das Dokument wesentlich übersichtlicher und eleganter aus:
Abbildung 12.32 Das neue Dokument
nach der Bearbeitung
Auslesen von Attributen
Neben dem Speichern der Information ist sicher auch das Abrufen von Interesse. Dazu nnen Sie sowohl
per Index als auch Bezeichner auf die einzelnen Attribute zurückgreifen.
Auslesen der Attribute aus
Test7_Attribute.xml
Sub XML_Versuch_7_Attribute_Auslesen()
Dim xmlDoc As DOMDocument30
Dim root As IXMLDOMElement
784
BEISPIEL
Dim node As IXMLDOMNode
Dim att As IXMLDOMAttribute
Dim list As IXMLDOMNodeList
Set xmlDoc = New DOMDocument30
xmlDoc.Load ("c:\Test7_Attribute.xml")
Set root = xmlDoc.documentElement
Alle Attribute extrahieren per Collection:
Set list = root.childNodes
For Each node In list
Debug.Print node.nodeName
For Each att In node.Attributes
Debug.Print " Attribut: " & att.Name & "=" & att.Value
Next
Next node
End Sub
Die Ausgabe:
Abbildung 12.33 Ausgabe im Direktfenster
Direkter Zugriff auf ein Element und dessen Attribut (Auslesen der Einwohnerzahl von Deutschland)
Sub XML_Versuch_7_Attribute_Auslesen2()
Dim xmlDoc As DOMDocument30
Dim root As IXMLDOMElement
Set xmlDoc = New DOMDocument30
xmlDoc.Load ("c:\Test7_Attribute.xml")
Set root = xmlDoc.documentElement
MsgBox "Einwohnerzahl Deutschland: " & _
root.selectSingleNode("EUROPA/Deutschland").Attributes.getNamedItem("Einwohner").Text
End Sub
Abbildung 12.34 Die Ausgabe
785
XML-Verarbeitung mit dem DOM

Get Microsoft Office Access 2007-Programmierung - Das Handbuch now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.