連載:[完全版]究極のC#プログラミング

Chapter18 LINQ to XML

川俣 晶
2010/05/06

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#の対応はどうなっているのだろうか?


 INDEX
  [完全版]究極のC#プログラミング
  Chapter18 LINQ to XML
    1.18.1 LINQプロバイダーを導入する別の理由
    2.18.2 XML最大の災厄
    3.18.3 DOMの憂鬱
  4.18.4 E4XのXMLサポート
    5.18.5 LINQ to XMLというブレークスルー
    6.18.6 単純化されたXML文書生成
    7.18.7 まとめ―ストレスレスなXMLの扱い/練習問題
 
インデックス・ページヘ  「[完全版]究極のC#プログラミング」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間