XML内にエレメントがない場合の処理。

[JavaScript][XML][ゲーム]XML内にエレ


むかつくー!!

 今回は以下のような修正をしました。

  • XMLの情報を変数として返す。
  • <image>タグがない場合にはこれまでの画像をそのままセットする。

 オブジェクト指向っぽく、と、XML記述を楽にするために、ってことで。
 まず、XMLの方はこんな感じ。


00000000.xml

<?xml version="1.0" encoding="UTF-8" ?>
<pages>
    <page>
        <image>f.jpg</image>
        <text>恋歌:むかつくー!!</text>
    </page>
    <page>
        <text>恋歌:むかつくむかつくむかつくー!!</text>
    </page>
<!-- 略 -->
</pages>


 2番目の<page>タグには、<image>タグがありません。
 こういう「省略記法」ができるように、というのが今回の修正の理由。
 <image>タグがあるかどうかのチェックはこんな感じ。


main.js

function getPage( ajax, index )
{
    var page = new Object();
    
    // <page>を取得します。
    var pageElement
        = ajax.responseXML.documentElement.getElementsByTagName( "page" )[index];

    // <image>の中身を取得します。
    if( pageElement.getElementsByTagName( "image" ).length != 0 )
    {
        page.imageUrl 
            = pageElement.getElementsByTagName( "image" )[0].childNodes[0].nodeValue;
    }
    else
    {
        page.imageUrl = null;
    }

// ...

    return page;
}


 タグがなければgetElementsByTagName()メソッドの戻り値の配列が、要素数0になるんでそれをチェック。
 それにしても、JavaScriptって不思議だなぁ……。
 とりあえず、メソッドなしの構造体みたいなオブジェクトを作る場合は、次のようにするらしい。

  • new Object()してとりあえずオブジェクトを作る。
  • プロパティは宣言の必要なし。アクセスすれば作られる。
  • 別に指定しなくても関数は戻り値を返せる。

 ……うう、「オブジェクト」を「インスタンス」、「プロパティ」を「フィールド」って言いてぇ(汗)。
 まぁとりあえずこれでタグの有無をチェックできることがわかったんで、たとえば<next_page>ってタグを作って00000001.xmlみたいに書いておくと次はそっちを読むとかできるな。
 さらに、背景用タグとか、選択肢用のタグ、画面エフェクト用タグもあとで追加するようにしていきましょう。