読者です 読者をやめる 読者になる 読者になる

VB.NETでもXMLを扱いたい(その6)

VB.NET

はじめに

ちょっと前にXmlDocument + XPathXMLの解析をダラダラとやった記事を書きました。

個人的には正直あれでいいかなーと言った感じでしたが、

『えーまじXmlDocument』『キモーイ』『XmlDocumentが許されるのは小学生までだよねー』『キャハハ』

という意見を受け取ったのと、VBC#に対して唯一勝っているXMLリテラルを軽く試す為にXDocumentで書き直しました。

内容が無いよう

若干出力が違うものの、やりたいことはその5と同じです。

Imports <xmlns:jm="http://jyuch.com/mailbox">

Module Module1

    Sub Main()
        Dim doc = XDocument.Load("mailbox.xml")

        Dim xss = New XmlSchemaSet()
        Using r = New IO.StreamReader("mailbox.xsd")
            Dim xs = XmlSchema.Read(r, Nothing)
            xss.Add(xs)
        End Using

        doc.Validate(xss, Nothing)

        For Each it In doc.<jm:mailbox>.<jm:mail>
            Console.WriteLine("+----------------------------------------------+")
            Dim from = it.<jm:from>.First
            Console.WriteLine("from name:{0} address:{1}", from.Attribute("name").Value, from.Attribute("address").Value)

            Dim recipient = it.<jm:recipient>.First
            For Each i In recipient.Elements
                Console.WriteLine("{0} name:{1} address:{2}", i.Name.LocalName, i.Attribute("name").Value, i.Attribute("address").Value)
            Next

            Dim subject = it.<jm:subject>.First.Elements.First
            Console.WriteLine("subject type:{0} value:{1}",
                              subject.Name.LocalName,
                              If(subject.Name.LocalName = "text", subject.Value, subject.Attribute("path").Value))

            Dim body = it.<jm:body>.First.Elements.First
            Console.WriteLine("body type:{0} value:{1}",
                              body.Name.LocalName,
                              If(body.Name.LocalName = "text", body.Value, body.Attribute("path").Value))
            Console.WriteLine("+----------------------------------------------+")
        Next
    End Sub

End Module

前回のXmlDocumentを使ったよりかなりすっきりした感じとなっております。 やっぱり新しい奴の方がなんだかんだ言っても書きやすいね。

それで、結果がこちら。

+----------------------------------------------+
from name:alice address:alice@jyuch.com
to name:bob address:bob@jyuch.com
subject type:text value:Hello bob
body type:text value:Who are you?
+----------------------------------------------+
+----------------------------------------------+
from name:bob address:bob@jyuch.com
to name:alice address:alice@jyuch.com
cc name:charile address:charlie@jyuch.com
subject type:file value:Re_Hello_bob.txt
body type:text value:I fine thank you. And you.
+----------------------------------------------+
+----------------------------------------------+
from name:alice address:alice@jyuch.com
to name:bob address:bob@jyuch.com
bcc name:dave address:dave@jyuch.com
subject type:text value:Re:Re:Hello bob
body type:file value:I_Fine_Thank_you.txt
+----------------------------------------------+

『クエリ構文なんて無かったんや』と言わんばかりに無視されるクエリ構文ですが、正直VBのクエリ構文は個人的にクッソ分かりずらいのであまり好きではありません。 サンプル少ないしね。

おわりに

いやまぁ、解説といった解説が無いんですけど、直感でわかるっしょ?解説できるほど知らないし。

XDocumentのサンプルコードなんてC#で腐るほどあるし、XMLリテラルについてはmsdn見てもらうのが一番早いし。

XML リテラルの概要 (Visual Basic)

まぁ、こんな感じで時系列でたどるとXDocumentが生産性が高いことがよくわかると思います。 ごめんなさい。ただの弊社の勉強不足です。

なんか何を言いたいのかよくわからない記事となってますが、要するにサンプルコードを載っけて終わりたかったんです。

おわり。