Mango 対応 Silverlight 検索アプリケーションの作成(7)変数の宣言と、XML文書ファイルへのアクセス
Mango 対応 Silverlight 検索アプリケーションの作成、前回からの続きです。
今回から、ロジックコードの説明をします。
ソリューションエクスプローラーのMainPage.xamlを展開して、MainPage.xaml.vbをダブルクリックしてコード画面を開きます。Visual Basicでコードを記述していきます。
1行目から解説しますが、数回に分けて掲載するため、途中でデバッグしても動作しないかエラーになりますので、注意してください。
まず、LINQ to XMLでXMLデータを処理するために、System.Xml.Linq名前空間をインポートしておきます。また、画像を表示させるためにBitmapImageを使うので、System.Windows.Media.Imaging名前空間をインポートしておきます。
Option Explicit On
Imports System.Xml.Linq
Imports System.Windows.Media.Imaging
item2「季節の料理」とitem4「検索結果」では、データを順次取得してコントロールにバインドしていくため、クラスを定義しておきます。
Public Class item2ImageInfo
Property 画像 As String
Property 季節主献立 As String
Property コメント As String
Property 季節菜食基本食材 As String
Property 季節菜食オプション As String
Property 季節肉食食材 As String
End Class
Public Class item4List
Property 一品主献立 As String
Property 一品菜食基本食材 As String
Property 一品菜食オプション As String
Property 一品肉食食材 As String
End Class
「今日の献立」「季節の料理」「一品検索」に用いる3個のXML文書ファイルと、検索キー入力ページで分類表示用に使うdataフォルダの中に置いたCookKey.xmlを処理するため、変数を宣言しておきます。
Dim item1Doc As XElement
Dim item2Doc As XElement
Dim item3Doc As XElement
Dim SearchInfoDoc As XElement
検索処理に用いる変数も宣言しておきます。
Dim checkNo1, checkNo2, checkNo3, checkNo4 As String
Dim searchIndex, searchIndexNo, cookKey, keywordAll, keyword As String
Dim searchCookKey As String = String.Empty
ページがロードされた時、3個のXML文書ファイルに絶対パスを指定してアクセスします。ダウンロードが完了した時、それぞれの処理を実行するように記述します(コードは次回掲載)。
また、dataフォルダに置いたCookKey.xmlを読み込み、<Key>要素のクエリを取得して、一品検索の分類選択用のListBoxに表示しておきます。
Private Sub MainPage_Loaded(sender As Object, e As System.Windows.RoutedEventArgs) Handles MyBase.Loaded
Dim item1Uri As New Uri("任意のドメイン/TodayMenu.xml", UriKind.Absolute)
Dim item1WebClient As New WebClient
item1WebClient.DownloadStringAsync(item1Uri)
AddHandler item1WebClient.DownloadStringCompleted, AddressOf Me.item1_DownloadCompleted
Dim item2Uri As New Uri("任意のドメイン/ThisMonth.xml", UriKind.Absolute)
Dim item2WebClient As New WebClient
item2WebClient.DownloadStringAsync(item2Uri)
AddHandler item2WebClient.DownloadStringCompleted, AddressOf Me.item2_DownloadCompleted
SearchInfoDoc = XElement.Load("data/CookKey.xml")
Dim SearchInfoQuery = From c In SearchInfoDoc.Descendants("Key") Select c
For Each result In SearchInfoQuery
ListBox3.Items.Add(result.Value)
Next
Dim item3Uri As New Uri("任意のドメイン/DailyMenu.xml", UriKind.Absolute)
Dim item3WebClient As New WebClient
item3WebClient.DownloadStringAsync(item3Uri)
AddHandler item3WebClient.DownloadStringCompleted, AddressOf Me.item3_DownloadCompleted
End Sub
本サンプルで使用するデータについて
本サンプルで使用するデータ(XML文書ファイル4個と、料理写真4点)は、「ここをクリック」してダウンロードできます。お使いのWebサーバに置いて、上記コード内の「任意のドメイン」部分を変更し、絶対パスで読み込んでください。
注意:今回のサンプルは、数年前に作成した「DailyMenu.xml」を再利用して作成しているため、3個のXML文書ファイルは、完全に同じ構造ではありません。が、XML設計の観点から言えば、3個とも同じ構造とし、
・毎日、「今日の献立」のデータを作成する。
・翌日には、「一品検索」のXML文書ファイルに追加する。
・「季節の献立」は、「一品検索」のXML文書ファイルから抜粋して作成する。
という形にすべきです。(実運用アプリではないので、サンプルデータ見直しよりも公開を優先しています)