テキスト編: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);
}
}
}
※ テキストは以上