You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

76 lines
3.4 KiB

'Klaus D. Raudszus / April 2005 (VB.Net 2003) / ergänzt Mai 2007 (VB 2005)
Imports System.Xml
Imports System.IO
Public Interface IXmlWorker
Sub XmlToTreeView(ByVal trv As TreeView, ByVal fileName As String)
Sub AddTreeNode(ByVal currTreeNode As TreeNode, ByVal currXmlNode As XmlNode)
Sub TreeViewToXml(ByVal trv As TreeView, ByVal fileName As String)
Sub AddXmlNode(ByVal currXmlNode As XmlNode, ByVal currTreeNode As TreeNode)
End Interface
Public Class XMLWorker
Implements IXmlWorker
Private m_Trv As TreeView
Private m_XmlDoc As XmlDocument
Public Sub New()
End Sub
'Xml-Document einlesen mit Hilfe des rekursiven Methodenaufrufes In AddTreeNode
Public Overridable Sub XmlToTreeView(ByVal trv As TreeView, ByVal fileName As String) Implements IXmlWorker.XmlToTreeView
If (File.Exists(fileName) AndAlso (Not trv Is Nothing)) Then
Me.m_Trv = trv
Me.m_Trv.BeginUpdate()
Me.m_XmlDoc = New XmlDocument
Me.m_XmlDoc.Load(fileName)
Dim ien As IEnumerator = Me.m_XmlDoc.DocumentElement.ChildNodes.GetEnumerator
While ien.MoveNext
Me.AddTreeNode(Nothing, DirectCast(ien.Current, XmlNode))
End While
Me.m_Trv.EndUpdate()
End If
End Sub
Protected Overridable Sub AddTreeNode(ByVal currTreeNode As TreeNode, ByVal currXmlNode As XmlNode) Implements IXmlWorker.AddTreeNode
Dim currentNode As TreeNode = Nothing
Dim nodeText As String = XmlConvert.DecodeName(currXmlNode.Name)
If (currTreeNode Is Nothing) Then
currentNode = Me.m_Trv.Nodes.Add(nodeText)
Else
If nodeText.Equals("#text") Then
Dim nt As String = XmlConvert.DecodeName(currXmlNode.Value)
currentNode = currTreeNode.Nodes.Add(nt)
Else
currentNode = currTreeNode.Nodes.Add(nodeText)
End If
End If
Dim ien As IEnumerator = currXmlNode.ChildNodes.GetEnumerator
While ien.MoveNext
Me.AddTreeNode(currentNode, DirectCast(ien.Current, XmlNode))
End While
End Sub '###########################################################################################
'TreeView auslesen mit Hilfe des rekursiven Methodenaufrufes In AddXmlNode
Public Overridable Sub TreeViewToXml(ByVal trv As TreeView, ByVal fileName As String) Implements IXmlWorker.TreeViewToXml
Me.m_XmlDoc = New XmlDocument
Dim docRootNode As XmlNode = Me.m_XmlDoc.CreateNode(XmlNodeType.Element, "TREEVIEW", "")
Me.m_XmlDoc.AppendChild(docRootNode)
Dim ien As IEnumerator = trv.Nodes.GetEnumerator
While ien.MoveNext
Me.AddXmlNode(docRootNode, DirectCast(ien.Current, TreeNode))
End While
Me.m_XmlDoc.Save(fileName)
End Sub
Protected Overridable Sub AddXmlNode(ByVal currXmlNode As XmlNode, ByVal currTreeNode As TreeNode) Implements IXmlWorker.AddXmlNode
Dim nodeText As String = XmlConvert.EncodeName(currTreeNode.Text)
Dim newXmlNode As XmlNode = Me.m_XmlDoc.CreateNode(XmlNodeType.Element, nodeText, "")
currXmlNode.AppendChild(newXmlNode)
Dim ien As IEnumerator = currTreeNode.Nodes.GetEnumerator
While ien.MoveNext
Me.AddXmlNode(newXmlNode, DirectCast(ien.Current, TreeNode))
End While
End Sub
End Class