IT/DEV Study

[VB] Xml 파일 읽고 저장하기. Class Serializer & Deserializer. XmlDocument 데이터 TreeView에 보여주기.

Ella.J 2024. 5. 3. 10:13
728x90
반응형

 

Xml 파일을 읽고 저장하기.

Class Serializer & Deserializer.

Xml 파일을 읽어 TreeView에 보여주기.

 

 

 

KpopList.xml

더보기
<?xml version="1.0"?>
<KPops xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <KPop>
    <Agency>YG</Agency>
    <Groups>
      <Group>
        <GroupName>BLACKPINK</GroupName>
        <Songs>
          <Song>Forever Young</Song>
          <Song>Don't Know What To Do</Song>
          <Song>Kick It</Song>
          <Song>Kill This Love</Song>
          <Song>Pink Venom</Song>
        </Songs>
      </Group>
      <Group>
        <GroupName>BabyMonster</GroupName>
        <Songs>
          <Song>SHEESH</Song>
          <Song>Stuck In The Middle</Song>
          <Song>BATTER UP</Song>
        </Songs>
      </Group>
    </Groups>
  </KPop>
  <KPop>
    <Agency>SM</Agency>
    <Groups>
      <Group>
        <GroupName>RIIZE</GroupName>
        <Songs>
          <Song>Siren</Song>
          <Song>Get A Guitar</Song>
        </Songs>
      </Group>
    </Groups>
  </KPop>
  <KPop>
    <Agency>JYP</Agency>
    <Groups>
      <Group>
        <GroupName>Stray Kids</GroupName>
        <Songs>
          <Song>S-Class</Song>
          <Song>CASE 143</Song>
          <Song>MANIAC</Song>
          <Song>Back Door</Song>
          <Song>Thunderous</Song>
        </Songs>
      </Group>
    </Groups>
  </KPop>
  <KPop>
    <Agency>ADOR</Agency>
    <Groups>
      <Group>
        <GroupName>NewJeans</GroupName>
        <Songs>
          <Song>Hype Boy</Song>
          <Song>GODS</Song>
          <Song>Bubble Gum</Song>
        </Songs>
      </Group>
    </Groups>
  </KPop>
</KPops>

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
Imports System.IO
Imports System.Xml
Imports System.Xml.Serialization
 
Public Class Form1
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
 
    End Sub
 
    Public KpopList As List(Of KPop) = Nothing
    <Serializable()>
    Public Class KPop
        Public Property Agency As String
        <XmlArrayItem("Group")>
        Public Property Groups As List(Of Group)
 
        Public Sub New()
            Groups = New List(Of Group)()
        End Sub
    End Class
    Public Class Group
        Public Property GroupName As String
        <XmlArrayItem("Song")>
        Public Property Songs As List(Of String)
 
        Public Sub New()
            Songs = New List(Of String)()
        End Sub
    End Class
 
    Private Function ExportClass(ByVal filePath As StringByVal kpops As List(Of KPop))
 
        Dim serializer As New XmlSerializer(GetType(List(Of KPop)), New XmlRootAttribute("KPops"))
        Using file As System.IO.FileStream = System.IO.File.Open(filePath, IO.FileMode.OpenOrCreate, IO.FileAccess.Write)
            serializer.Serialize(file, kpops)
        End Using
 
    End Function
 
    Private Function ImportClass(ByVal filePath As StringAs List(Of KPop)
 
        'Xml 데이터 KPop Class 형식으로 Deserialized
        Dim serializer As New XmlSerializer(GetType(List(Of KPop)), New XmlRootAttribute("KPops"))
        Using file = System.IO.File.OpenRead(filePath)
            Return DirectCast(serializer.Deserialize(file), List(Of KPop))
        End Using
 
    End Function
 
    Private Sub BtnOpen_Click(sender As Object, e As EventArgs) Handles BtnOpen.Click
        Dim xmlDoc As New XmlDocument()
        Using f As OpenFileDialog = New OpenFileDialog()
            f.Filter = "(*.xml)|*.xml"
 
            If f.ShowDialog() = DialogResult.OK Then
                Dim filepath = f.FileName
                TxtPath.Text = filepath
 
                'Xml 가져오기
                KpopList = ImportClass(filepath)
 
                'Xml 데이터 TreeView에 보여주기
                xmlDoc.Load(filepath)
                TreeView1.Nodes.Clear()
                TreeView1.Nodes.Add(New TreeNode(xmlDoc.DocumentElement.Name))
                Dim tNode As New TreeNode()
                tNode = TreeView1.Nodes(0)
                addTreeNode(xmlDoc.DocumentElement, tNode)
                TreeView1.ExpandAll()
            End If
        End Using
    End Sub
 
    Private Sub addTreeNode(ByVal xmlNode As XmlNode, ByVal treeNode As TreeNode)
        Dim xNode As XmlNode
        Dim tNode As TreeNode
        Dim xNodeList As XmlNodeList
 
        If xmlNode.HasChildNodes Then
            xNodeList = xmlNode.ChildNodes
 
            For x As Integer = 0 To xNodeList.Count - 1
                xNode = xmlNode.ChildNodes(x)
                treeNode.Nodes.Add(New TreeNode(xNode.Name))
                tNode = treeNode.Nodes(x)
                addTreeNode(xNode, tNode)
            Next
        Else
            treeNode.Text = xmlNode.OuterXml.Trim()
        End If
    End Sub
 
    Private Sub BtnSave_Click(sender As Object, e As EventArgs) Handles BtnSave.Click
        Dim f As SaveFileDialog = New SaveFileDialog()
        f.Filter = "(*.xml)|*.xml"
 
        If f.ShowDialog() = DialogResult.OK Then
            TxtPath.Text = f.FileName
            Dim di As DirectoryInfo = New DirectoryInfo(f.FileName)
            If di.Exists Then di.Create()
 
            'Xml 저장하기
            ExportClass(f.FileName, KpopList)
        End If
    End Sub
End Class
 
cs

 

 

 

KpopList.xml
0.00MB

728x90
반응형