VB.NETでのXMLの読み書き方法とは?シリアライズやデシリアライズの方法を紹介
- SE
- XMLの読み書き方法について教えてください。
- PM
- シリアライズ・デシリアライズの方法や、LINQを使ったXMLの検索方法について紹介します。
[VB.NET]XMLの読み書き方法とは?
今回は、VB.NETでのXMLの読み書き方法について説明します。
オブジェクトをファイルなどに書き込むことをシリアライズ、ファイルなどからオブジェクトを読み出すことをデシリアライズといいます。ここでは、シリアライズ・デシリアライズの方法や、LINQを使ったXMLの検索方法を紹介します。
VB.NETでのXMLの読み書き方法に興味のある方はぜひご覧ください。
シリアライズ
VB.NETでのXMLシリアライズ方法を紹介します。実際のソースコードを見てみましょう。
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
|
Imports System.IO
Imports System.Text
Imports System.Xml.Serialization
Public Class Userinfo
Public Property Name As String
Public Property Age As Integer
End Class
Module Program
Sub Main(args As String())
' 作成するXMLファイル
Const xmlFile As String = "C:\test\test.xml"
' オブジェクト生成
Dim obj = New Userinfo With {.Name = "taro", .Age = 27}
' Userinfoをシリアライズする
Dim xmlSerializer = New XmlSerializer(GetType(Userinfo))
Using streamWriter = New StreamWriter(xmlFile, False, Encoding.UTF8)
xmlSerializer.Serialize(streamWriter, obj)
streamWriter.Flush()
End Using
End Sub
End Module
|
実行すると、「C:\test\test.xml」が生成されます。中身は以下のようになります。
1
2
3
4
5
|
<?xml version="1.0" encoding="utf-8"?>
<Userinfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Name>taro</Name>
<Age>27</Age>
</Userinfo>
|
このようにVB.NETでは、Serialize()でオブジェクトをシリアライズできます。
シリアライズ(複数)
VB.NETでのリストのXMLシリアライズ方法を紹介します。実際のソースコードを見てみましょう。
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
|
Imports System.IO
Imports System.Text
Imports System.Xml.Serialization
Public Class Userinfo
Public Property Name As String
Public Property Age As Integer
End Class
Module Program
Sub Main(args As String())
' 作成するXMLファイル
Const xmlFile As String = "C:\test\test2.xml"
' オブジェクト生成
Dim users As New List(Of Userinfo)
users.Add(New Userinfo With {.Name = "taro", .Age = 27})
users.Add(New Userinfo With {.Name = "jiro", .Age = 42})
users.Add(New Userinfo With {.Name = "saburo", .Age = 35})
' Userinfoをシリアライズする
Dim xmlSerializer = New XmlSerializer(GetType(List(Of Userinfo)))
Using streamWriter = New StreamWriter(xmlFile, False, Encoding.UTF8)
xmlSerializer.Serialize(streamWriter, users)
streamWriter.Flush()
End Using
End Sub
End Module
|
実行すると、「C:\test\test2.xml」が生成されます。中身は以下のようになります。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
<?xml version="1.0" encoding="utf-8"?>
<ArrayOfUserinfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Userinfo>
<Name>taro</Name>
<Age>27</Age>
</Userinfo>
<Userinfo>
<Name>jiro</Name>
<Age>42</Age>
</Userinfo>
<Userinfo>
<Name>saburo</Name>
<Age>35</Age>
</Userinfo>
</ArrayOfUserinfo>
|
デシリアライズ
VB.NETでのXMLデシリアライズ方法を紹介します。実際のソースコードを見てみましょう。
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
|
Imports System.IO
Imports System.Text
Imports System.Xml.Serialization
Public Class Userinfo
Public Property Name As String
Public Property Age As Integer
End Class
Module Program
Sub Main(args As String())
' 読み込むXMLファイル
Const xmlFile As String = "C:\test\test2.xml"
' Userinfoをデシリアライズする
Dim xmlSerializer = New XmlSerializer(GetType(List(Of Userinfo)))
Dim result As List(Of Userinfo)
Dim xmlSettings = New Xml.XmlReaderSettings() With {
.CheckCharacters = False ' 不正な文字をチェックしない
}
Using streamReader = New StreamReader(xmlFile, Encoding.UTF8)
Using xmlReader = Xml.XmlReader.Create(streamReader, xmlSettings)
result = CType(xmlSerializer.Deserialize(xmlReader), List(Of Userinfo))
End Using
End Using
' 結果表示
For Each user As Userinfo In result
Console.WriteLine($"name:{user.Name}, age:{user.Age}")
Next
End Sub
End Module
|
実行結果は以下のようになります。
1
2
3
|
name:taro, age:27
name:jiro, age:42
name:saburo, age:35
|
このようにVB.NETでは、Deserialize()でオブジェクトをデシリアライズできます。
LINQで検索
VB.NETでの、XMLをLINQで検索する方法を紹介します。実際のソースコードを見てみましょう。
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
|
Module Program
Sub Main(args As String())
Try
' XMLの読み込み
Dim xmlElement As XElement = XElement.Load("C:\test\test2.xml")
' LINQのクエリ(taで始まるName)
Dim query = From elem In xmlElement.Elements("Userinfo") Where elem.Element("Name").Value Like "ta*"
' 結果表示
For Each elem In query
Console.WriteLine($"name:{elem.Element("Name").Value}, age{elem.Element("Age").Value}")
Next
Console.WriteLine("----------------------")
' LINQのクエリ(Ageが30より大きい)
query = From elem In xmlElement.Elements("Userinfo") Where Integer.Parse(elem.Element("Age").Value) > 30
' 結果表示
For Each elem In query
Console.WriteLine($"name:{elem.Element("Name").Value}, age{elem.Element("Age").Value}")
Next
Catch ex As Exception
Console.WriteLine(Err.Description)
End Try
End Sub
End Module
|
実行結果は以下のようになります。
1
2
3
4
|
name:taro, age27
----------------------
name:jiro, age42
name:saburo, age35
|
このようにVB.NETでは、XMLをLINQで検索できます。
- SE
- VB.NETでのXMLの読み書き方法について理解できました。
- PM
- シリアライズ・デシリアライズの方法や、LINQを使ったXMLの検索方法などマスターしてみましょう。
まとめ
いかがでしたでしょうか。VB.NETでのXMLの読み書き方法について説明しました。
オブジェクトをファイルなどに書き込むことをシリアライズ、ファイルなどからオブジェクトを読み出すことをデシリアライズといいます。ここでは、シリアライズ・デシリアライズの方法や、LINQを使ったXMLの検索方法を紹介しました。
ぜひご自身でVB.NETのソースコードを書いて、理解を深めてください。
Search キーワード検索
Popular 人気の記事
-
【VB.NET入門】DataGridViewの使い方まとめ
公開: 更新:
reccomended おすすめ記事
-
【.NETが統合】.NET 5の概要と今後のリリース予定
公開: 更新:
Categories 連載一覧
Tags タグ一覧
Jobs 新着案件
-
生産管理システムの単体テスト/東京都千代田区/【WEB面談可】/在宅勤務
月給25万~25万円東京都千代田区(東京駅) -
鉄鋼関連・グループ会社システム支援/Oracle/東京都新宿区/【WEB面談可】/在宅勤務
月給26万~26万円東京都新宿区(新宿駅) -
資産運用会社向け残高管理システム運用保守/SQLServer/東京都中央区/【WEB面談可】
月給50万~60万円東京都中央区(銀座駅) -
資産運用会社向け残高管理システム開発のテスター/SQLServer/東京都中央区/【WEB面談可】
月給25万~35万円東京都中央区(銀座駅) -
Web受注システム運用保守/VB.NET/東京都港区/【WEB面談可】
月給50万~60万円東京都港区(品川駅) -
Web受注システム開発のテスター/VB.NET/東京都港区/【WEB面談可】
月給25万~35万円東京都港区(品川駅)