VB.NETでの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で検索できます。
まとめ
いかがでしたでしょうか。VB.NETでのXMLの読み書き方法について説明しました。
オブジェクトをファイルなどに書き込むことをシリアライズ、ファイルなどからオブジェクトを読み出すことをデシリアライズといいます。ここでは、シリアライズ・デシリアライズの方法や、LINQを使ったXMLの検索方法を紹介しました。
ぜひご自身でVB.NETのソースコードを書いて、理解を深めてください。