オルタナティブ・ブログ > イメージ AndAlso ロジック >

ヴィジュアル、サウンド、テキスト、コードの間を彷徨いながら、感じたこと考えたことを綴ります。

Mango 対応 Silverlight 検索アプリケーションの作成(7)変数の宣言と、XML文書ファイルへのアクセス

»

Mango 対応 Silverlight 検索アプリケーションの作成、前回からの続きです。
今回から、ロジックコードの説明をします。

ソリューションエクスプローラーのMainPage.xamlを展開して、MainPage.xaml.vbをダブルクリックしてコード画面を開きます。Visual Basicでコードを記述していきます。

8_1

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文書ファイルから抜粋して作成する。
という形にすべきです。(実運用アプリではないので、サンプルデータ見直しよりも公開を優先しています)

Comment(0)