VB.NETでもXMLを扱いたい(その6)
はじめに
ちょっと前にXmlDocument
+ XPath
でXMLの解析をダラダラとやった記事を書きました。
個人的には正直あれでいいかなーと言った感じでしたが、
『えーまじXmlDocument』『キモーイ』『XmlDocumentが許されるのは小学生までだよねー』『キャハハ』
という意見を受け取ったのと、VBがC#に対して唯一勝っている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のクエリ構文は個人的にクッソ分かりずらいのであまり好きではありません。 サンプル少ないしね。
おわり