講義メモ

テキスト編:p.416「XMLデータとLINQ」から
ゲーム開発編:敵機と爆散円の衝突判定、敵弾と爆散円の衝突判定と誘爆、サウンド処理

p.416(XMLとは)

・XMLはエクステンシブル(拡張可能な)マークアップランゲージの略で、Webページの記述に用いるHTMLに近いマークアップ言語
・マークアップ言語は文字列情報に<>で挟んだタグと呼ばれる制御情報を与える仕組み
・HTMLの場合は、Webブラウザで定められたタグを用いて、文字色や画像挿入などを指定できる
 例: <HTML><HEAD>…<BODY>ここは<b>太字</b></BODY></HTML>
・XMLの場合は、汎用であり、作成者が自由に定めたタグを用いて、構造情報を持つ文書を作成できる
 例: <?xml … ?><book><title>題名</title><bookbody>本文</bookbody></book>
・よって、ゲームなどの大量の文字列情報を用いるアプリにおいて、これをXML形式で表現する例が増えている
・XML形式の文書の先頭行には<?xml version="1.0" encoding="文字コード" ?>を置く
・文字コードは主にuft-8を用いることが多い

p.416 XMLデータとLINQ

・LINQのクエリ対象としてXMLデータが利用可能
・Visual Studioにおいて、下記の準備作業が必要
 ①ソリューションエクスプローラで「参照」を右クリックし「参照の追加」
 ②「System.Xml」と「System.Xml.Linq」のチェックをオンにして「OK」
・外部のXMLファイルの読込には、System.Xml.Linq.XElementクラスの静的メソッド XElement Load("ファイル名")を用いる
 例(using済): XElement x = Load("myxmlsfile.xml");
・クエリ式ではin句において、XElementクラスのインスタンスメソッドElements()でコレクションを得て用いる
・where/orderby句では、XElementクラスのインスタンスメソッドElement("タグ名")でタグへの参照(コンテナ)を得て、
 Valueプロパティで文字列を受け取る
・コンテナはXContainerクラス型なので、そこにValueプロパティがある
・クエリ結果の取り出しのforeachにおいても、Element("タグ名").Valueを用いる

p.417 xml01.cs

//p.417 xml01.cs
using System;
using System.Linq;
using System.Xml.Linq;
class xml01 {
    public static void Main() {
        XElement students = XElement.Load("student.xml"); //XMLを開く
        var q =
            from person in students.Elements() //要素名を与える
            where int.Parse(person.Element("point").Value) >= 60 //pointの条件
            orderby person.Element("point").Value descending //降順でソート
            select person; //要素名を指定
        foreach (var p in q) { //XElementを1つずつ取り出して
            Console.WriteLine("{0}, {1}, {2}",
                p.Element("name").Value,
                p.Element("point").Value,
                p.Element("id").Value); //値を得て表示
        }
    }
}

p.419(XMLデータとラムダ式によるLINQ)

・クエリ式をメソッド構文にして、ラムダ式を用いると記述がシンプルになる
・書式例: XElementオブジェクト.Elements().Select(x => x);

p.419 xml02.cs

//p.419 xml02.cs
using System;
using System.Linq; //LINQ用
using System.Xml.Linq; //XElement用
class xml02 {
    public static void Main() {
        XElement Students = XElement.Load("student.xml");
        var q =
            Students.Elements()
              .Where(x => int.Parse(x.Element("point").Value) >= 60) //抽出
              .OrderByDescending(x => x.Element("point").Value) //整列
              .Select(x => x); //メソッド構文をラムダ式で示したもの
        foreach (var p in q) {
            Console.WriteLine("{0}, {1}, {2}",
                p.Element("name").Value,
                p.Element("point").Value,
                p.Element("id").Value);
        }
    }
}

※ テキストは以上

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です