|
|
連載:[完全版]究極のC#プログラミング
Chapter18 LINQ to XML
川俣 晶
2010/05/06 |
![](/fdotnet/extremecs/index/extremecs_m.jpg) |
|
18.4 E4XのXMLサポート
さて、基本機能だけ使ってもうまくいかず、XPath式の力を借りてなんとか使えていたDOMだが、それでも不満の種が残った。
しかし、不満を抱くプログラマーの数はもちろん多かったにもかかわらず、それがメジャーな世論を形成することはなかったように思う。なぜなら、XML界の世論とは、語る前に手を動かしてコードを書く誠実な技術者ではなく、手は動かさずに語ることだけで“僕の賢さ”をアピールする者たちによって形成される傾向があったからだ。もちろん、それは当然の成り行きといえる。語らずにコードを書く者は、いくら人数が多くとも語らないがゆえに、世論を形成しないのである。
しかし、一般論として他言語も含めれば、問題解決のための試みがなかったわけではない。
たとえば、ECMAScript for XML(E4X)は、ECMAScriptにXMLサポートを組み込むための言語仕様であり、DOMよりもはるかに簡潔にXML文書を扱える。E4Xは一部のWebブラウザやFlash(ActionScript)ですでにサポートされているので、体験することは容易である。
ここでは、筆者が以前に作成したFlashによるクイズゲームである「超クイズ」のソースコード(ActionScript 3.0)を引用してみよう(リスト18.3、リスト18.4参照)。
overClaimButton1.addEventListener(MouseEvent.CLICK, function(e)
{
descriptionText.text =
quizSet.set[quizCount].d + "\n\n問題提供者連絡先:\n"
+ quizSet.creator + ", " + quizSet.contact;
}
);
|
|
リスト18.3 超クイズのソースコードから抜粋(ActionScript 3.0) |
mainQuizSet = <qset>
<title>テスト用内蔵クイズ</title>
<creator>オータム</creator>
<contact>autumn@example.com</contact>
<set>
<q>1980年前後の初期マイコンブーム時代に存在していない雑誌名はどれか</q>
<c>ASCII</c>
<c>I/O</c>
<c>bit</c>
<c>RAM</c>
<c>マイコン</c>
<a>0</a>
<d>ASCII、I/O、bit、RAM、マイコン。以上はすべて実在した雑誌名。ただし、bitはマイコ
ン雑誌ではなく、コンピュータ一般を扱う雑誌であり、出題意図を「マイコン雑誌」と誤読
すると選ばれるワナとして用意されている。</d>
</set>
</qset>;
|
|
リスト18.4 クイズ定義データ(抜粋) |
DOMに慣れ親しんでいると、リスト18.3のコードがXML文書を扱うことについてピンとこないかもしれない。変数quizSetには、qset要素に当たるオブジェクトが代入されている。そこで、quizSet.set[quizCount].dは、qset要素の子要素setの中のquizCount番目の要素を取り出し、さらにその子要素のd要素の内容を取り出している。つまり、リスト18.4の「ASCII、I/O……として用意されている。」という文字列が式を評価した値となる。また、同様に、quizSet.creatorを評価した値は「オータム」、quizSet.contactを評価した値は「autumn@example.com」となる。
このようなコードが記述可能であることは、想像力のある者なら容易に思い付くし、E4Xの初版は2004年6月に勧告されている以上、単なる想像ではなく現実に可能であることはこの時点で証明済みであったともいえる。
ECMAScript(JavaScript)はそれでいいとして、では、C#の対応はどうなっているのだろうか?
Insider.NET 記事ランキング
本日
月間