Nach einer Idee von crivi und WaldiMaywood
Imports System.Xml
Imports System.IO
Public Class clsXML
Private _xmlFile As String 'Pfadangabe der xml-Datei
Private _xmlDoc As XmlDocument 'die ins RAM geladene xml-Datei
Private _xmlNode As XmlNode 'ein selektierter Knoten
Sub New(ByVal DateiName As String)
'Konstrukor, Uebergabe des Speicherpfades der xml-Datei
'Bsp.: "C:\Dokumente und" & _
"Einstellungen\ThinkingBomb\Desktop\WindowsApplication3\XMLFile1.xml"
'Falls Datei nicht existent, Erstellen der Datei mit Grundgeruest
_xmlFile = DateiName
End Sub
Public Function Open() As Boolean
'Oeffnet eine vorhandene xml-Datei und selektiert einen bestimmten
' Knoten,
'auf den im spaeteren Verlauf alles bezogen wird
_xmlDoc = New XmlDocument 'Instanzierung
If Not File.Exists(_xmlFile) Then
'Dann wird sie eben das Grundgeruest erzeugt...
_xmlDoc.LoadXml("<?xml version='1.0'" & _
"encoding='utf-8'?><Wurzelknoten><Kindknoten>" _
& "</Kindknoten></Wurzelknoten>")
Else
_xmlDoc.Load(_xmlFile) 'Öffnen der
' vorhandenen XML-Datei
End If
_xmlNode = _xmlDoc.SelectSingleNode("Wurzelknoten/Kindknoten")
If _xmlNode Is Nothing Then
Return False
End If
Return True
End Function
Public Sub Save()
'Speichern des DOM-Dokumentes
_xmlDoc.Save(_xmlFile)
End Sub
Public Sub SetNewNode(ByVal NameOfNode As String, ByVal NameOfAttribut As _
String, ByVal ValueOfAttribut As String)
'Ein neuer Knoten wird erzeugt, wenn die Uebergabeparameter nicht schon
' ein Knoten bilden
'Pruefung, ob Knoten bereits vorliegt, durch NodeExists
'If Not NodeExists(NameOfNode, NameOfAttribut, ValueOfAttribut) Then
Dim element As XmlElement
element = _xmlDoc.CreateElement(NameOfNode)
element.SetAttribute(NameOfAttribut, ValueOfAttribut)
_xmlNode.AppendChild(element)
'End If
End Sub
Public Function NodeExists(ByVal NameOfNode As String, _
ByVal NameOfAttribut As String, _
ByVal ValueOfAttribut As String) As Boolean
'Pruefung, ob ein Knoten mit den Uebergabeparametern bereits existiert
'Antwort mit True oder False
Dim DummyNode As XmlNode
If Not _xmlNode.HasChildNodes Then
Return False
End If
For Each DummyNode In _xmlNode.ChildNodes
If DummyNode.Name = NameOfNode Then
If DummyNode.Attributes(NameOfAttribut).Value = ValueOfAttribut _
Then
Return True
End If
End If
Next
Return False
End Function
Public Function GetValue(ByVal NameOfNode As String, _
ByVal NameOfAttribut As String, _
ByVal intIndex As Int16) As String
'Liefert den Wert des Attributes, dessen Index angegeben werden muss
'Index von Null bis x, je nach Anzahl der Attribute
Dim DummyNode As XmlNode
If Not _xmlNode.HasChildNodes Then
Return Nothing
End If
For Each DummyNode In _xmlNode.ChildNodes
If DummyNode.Name = NameOfNode Then
If DummyNode.Attributes(intIndex).Name = NameOfAttribut Then
Return DummyNode.Attributes(intIndex).Value
End If
End If
Next
Return Nothing
End Function
Public Function ListAttributs(ByVal NameOfNode As String, ByVal _
NameOfAttribut As String) As String()
'Gibt zu einem Knoten- und Attributsnamen in einem Array sämtliche
' Attributswerte zurück,
'falls Auswahl zutrifft
Dim strCollection As New System.Collections.Specialized.StringCollection
Dim DummyNode As XmlNode
Dim strBuffer As String()
If Not _xmlNode.HasChildNodes Then
Return Nothing
End If
For Each DummyNode In _xmlNode.ChildNodes
If DummyNode.Name = NameOfNode Then
strCollection.Add(DummyNode.Attributes(NameOfAttribut).Value)
End If
Next
ReDim strBuffer(strCollection.Count - 1)
strCollection.CopyTo(strBuffer, 0)
Return strBuffer
End Function
End Class |