訪問して頂きありがとうございます。まさふくろーです。
この記事では、LINQを使ってXMLファイルを検索する方法をご紹介します。
目次
LINQを使ってXMLファイルを検索する
LINQとは
LINQでXMLファイルを扱うには
XElementオブジェクト = XElement.Load(XMLファイル名)
要素を取得する場合
From 範囲変数 In XElement型の変数.Elements("親の要素名") Where 条件式
範囲変数.Element("子の要素名").Value = "100"(子の要素名の値が100のデータを抽出)
属性を取得する場合
From 範囲変数 In XElement型の変数.Elements("属性が設定されている要素名") Where 条件式
範囲変数.Attribute("属性名").Value = "001"(属性名の値が001のデータを抽出)
前方一致の場合
Where 要素名 Like "A*" (Aから始まる値を抽出)
部分一致の場合
Where 要素名 Like "*A*" (Aを含む値を抽出)
後方一致の場合
Where 要素名 Like "*A" (Aで終わる値を抽出)
サンプルデータ
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 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
<?xml version="1.0" encoding="UTF-8"?> <dataroot xmlns:od="urn:schemas-microsoft-com:officedata" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="社員マスタ.xsd" generated="2020-07-04T11:56:34"> <社員マスタ> <社員コード>105</社員コード> <フリガナ>モリウエ イクマ</フリガナ> <氏名>森上 偉久馬</氏名> <在籍支社>東京本社</在籍支社> <部署名>第一営業</部署名> <誕生日>1967-10-25T00:00:00</誕生日> <入社日>1990-04-01T00:00:00</入社日> <自宅郵便番号>1900003</自宅郵便番号> <自宅都道府県>東京都</自宅都道府県> <自宅住所1>立川市栄町 4-18-XX</自宅住所1> <自宅電話番号>(0425)25-05XX</自宅電話番号> <内線>215</内線> <写真>EMPID5.BMP</写真> <プロフィール>私は中学生までの間、合唱をやっていました。声が高いので、パートはテノールでした。流行のサッカーよりも野球の方が好きで、ジャイアンツのファンです。</プロフィール> </社員マスタ> <社員マスタ> <社員コード>107</社員コード> <フリガナ>カツラギ コウシ</フリガナ> <氏名>葛城 孝史</氏名> <在籍支社>東京本社</在籍支社> <部署名>第二営業</部署名> <誕生日>1961-02-03T00:00:00</誕生日> <入社日>1991-09-01T00:00:00</入社日> <自宅郵便番号>1530064</自宅郵便番号> <自宅都道府県>東京都</自宅都道府県> <自宅住所1>目黒区下目黒 3-16-XX</自宅住所1> <自宅住所2>松・アネックスビル</自宅住所2> <自宅電話番号>(03)3714-75XX</自宅電話番号> <内線>231</内線> <写真>EMPID8.BMP</写真> <プロフィール>私は、東京生まれの東京育ち。趣味と言えるほどのものはありませんが、強いて言うなら車が好きなので、たまにドライブへ出かけます。新緑や紅葉の季節は特に山がきれいです。</プロフィール> </社員マスタ> <社員マスタ> <社員コード>110</社員コード> <フリガナ>カトウ ヤスエ</フリガナ> <氏名>加藤 泰江</氏名> <在籍支社>東京本社</在籍支社> <部署名>第一営業</部署名> <誕生日>1968-02-02T00:00:00</誕生日> <入社日>1990-04-01T00:00:00</入社日> <自宅郵便番号>1520021</自宅郵便番号> <自宅都道府県>東京都</自宅都道府県> <自宅住所1>目黒区東ケ丘 1-5-X</自宅住所1> <自宅電話番号>(03)3421-16XX</自宅電話番号> <内線>273</内線> <写真>EMPID6.BMP</写真> <プロフィール>私は、スポーツが好きで、特にサッカーは見るのもするのも夢中になります。並行して、家が以前、エレクトーンの教室を開いていたので、楽器もよく演奏したりしていました。</プロフィール> </社員マスタ> <社員マスタ> <社員コード>204</社員コード> <フリガナ>カワムラ タダシ</フリガナ> <氏名>川村 匡</氏名> <在籍支社>大阪支社</在籍支社> <部署名>営業開発</部署名> <誕生日>1957-12-08T00:00:00</誕生日> <入社日>1990-04-01T00:00:00</入社日> <自宅郵便番号>5610857</自宅郵便番号> <自宅都道府県>大阪府</自宅都道府県> <自宅住所1>豊中市服部寿町 1-11-5-XXX</自宅住所1> <自宅電話番号>(06)6862-91XX</自宅電話番号> <内線>306</内線> <写真>EMPID3.BMP</写真> <プロフィール>私は、両親共にアメリカ人ですが、生まれも育ちも日本です。日本の文化はもちろん気に入っていますが、何と言っても、技術の進歩の速度に興味があります。個人的には、パソコンが趣味です。</プロフィール> </社員マスタ> </dataroot> |
サンプルプログラム
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 |
Public Class Form1 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim str As String = String.Empty Try Dim EmpMa As XElement = XElement.Load("C:\sample\社員マスタ.xml") Dim query = From em In EmpMa.Elements("社員マスタ") Where em.Element("社員コード").Value Like "1*" For Each em In query str &= em.Element("社員コード").Value & Space(5) & em.Element("氏名").Value & ControlChars.NewLine Next Label1.Text = str Catch ex As Exception Label1.Text = Err.Description End Try End Sub End Class |
2 | 「XMLファイルから社員コードが「1」から始まる社員コードと氏名を取得」ボタンクリック時に以下処理を行う。 |
8 |
XMLファイルのデータを読み込み、XElement型の変数「EmpMa」に代入。 |
10 |
要素名<社員マスタ>から要素名<社員コード>の値が「1」から始まる要素を取得する。 |
12 | 取得した件数分、以下処理を繰り返す。 |
13 | 要素名<社員コード>、要素名<氏名>の値を取得し、String型の変数「str」に追加していく。 |
16 | 処理が完了したら、変数「str」の値をラベルに表示する。 |
18 | 処理の実行中にエラーが発生した場合、 |
20 | エラー内容を取得し、ラベルに表示する。 |
関連記事
コレクションまたは配列に対して処理を繰り返す
【VB.NET】コレクションまたは配列に対して処理を繰り返す方法
構造化例外処理
最後まで読んでいただき、ありがとうございました!