VBすげーって思った今日この頃。
以下のMSDNバーチャルラボにて知りました。
- MSDN バーチャル ラボ: Visual Studio 2008 による XML データアクセス - System.Xml.Linq 名前空間と LINQ の利用
.NET Framework 3.5になって、XMLを処理するクラスに以下のクラスが追加されています。
- XDocument
- XElement
- XAttribute
上記のやつでも十分便利なのですが、VBの場合はさらに固有のやり方があります。
まずは以下のソースを見てみてください。
Imports System Imports System.Collections.Generic Imports System.Data Imports System.Linq Imports System.Xml Imports System.Xml.Linq Imports System.Xml.XPath Public Class Program Public Sub Execute() ' ' XDocumentオブジェクトのコンストラクタで一気に生成. (C#でも利用可能) ' Dim xmlDoc = CreateXDocument() Console.WriteLine(xmlDoc) Console.WriteLine() ' ' リテラルからXDocumentを生成. (VB特有) ' xmlDoc = CreateXDocument2() Console.WriteLine(xmlDoc) Console.WriteLine() ' ' <%= %>を利用してXDocumentを生成. (VB固有) ' xmlDoc = CreateXDocument3() Console.WriteLine(xmlDoc) ' ' 通常の要素へのアクセス方法. ' Console.WriteLine(xmlDoc.Element("TestData").Element("Data").Element("answer").Value) Dim elements = _ From element In xmlDoc.Descendants("answer") _ Select element For Each element In elements Console.WriteLine(element.Value) Next ' ' VB特有のアクセスの方法. ' Console.WriteLine(xmlDoc... .Value) elements = _ From element In xmlDoc... _ Select element For Each element In elements Console.WriteLine(element.Value) Next End Sub Private Function CreateXDocument() As XDocument Return New XDocument( _ New XElement("TestData", _ New XElement("Data", _ New XElement("x", 1), _ New XElement("y", 2), _ New XElement("answer", 3) _ ), _ New XElement("Data", _ New XElement("x", 2), _ New XElement("y", 3), _ New XElement("answer", 5) _ ) _ ) _ ) End Function Private Function CreateXDocument2() As XDocument Dim contents As XElement = _ Return New XDocument(contents) End Function Private Function CreateXDocument3() As XDocument Dim contents As XElement = _ 1 2 3 2 3 5 <%= From i In Enumerable.Range(1, 2) _ Let x = i _ Let y = (i + 1) _ Let answer = (x + y) _ Select _ Return New XDocument(contents) End Function Shared Sub Main() Dim prg = New Program() prg.Execute() Console.ReadKey() End Sub End Class<%= x %> <%= y %> <%= answer %> _ %>
VBの場合は、以下のやり方が出来ます。
- XMLをリテラルで書くと、XElementオブジェクトに変換してくれる。
Dim contents As XElement = _1 2 3 2 3 5
って書いてもオッケイです。(コンパイルがちゃんと通ります。)
さらに、ASP.NETライクな記法も使えます。
Dim contents As XElement = _<%= From i In Enumerable.Range(1, 2) _ Let x = i _ Let y = (i + 1) _ Let answer = (x + y) _ Select _ <%= x %> <%= y %> <%= answer %> _ %>
って書いてもオッケイです。(コンパイルがちゃんと通ります。)
要素にアクセスする際も、以下のようにしてアクセスできます。
- Descendantsメソッドと同じ効果
xmlDoc...
- Elementメソッドと同じ効果
xmlDoc...
上記のバーチャルラボでは、他にもXMLの更新方法のやり方などが
分かりやすく載っていますので勉強になります。