XMLデータを解析する
new XML()によりXMLオブジェクトが生成されましたので、次にサンプル01のXMLデータを解析してみます。WebブラウザーのJavaScriptでは、XMLデータの解析はgetElementById()やgetElementsByTagName()などのメソッドを使いますが、Bridgeにはそのようなメソッドは用意されていません。firstChildやlastChildなどもありません。
Bridgeではchild()を使うか、タグ名を直接指定してJavaScriptの配列形式でノードに対してアクセスします。サンプル01で生成したXMLオブジェクトの最初にあるtitle要素に対して、child()でアクセスするには以下のように書きます。
testXML.child(0).child(0)
戻り値はXMLオブジェクトです。テキストとして処理するには、文字列と連結するかtoString()を使って文字列に変換する必要があります。
一方、child()を使わずに直接XMLタグ名を指定する場合は、以下のように記述します。
testXML.data[2].contents[0].child(0)
今回のXMLデータの場合は以下のように記述しても結果は同じです。上の記述に比べておおよそ20%ほど処理速度が向上しますので、少しでも解析速度を上げたいときはこの方法がよいでしょう。
testXML.data[2].contents
なお、XMLタグ名での指定よりもchild()を使った方が4倍ほど高速に処理できます。Bridgeでどの程度までのXMLデータを解析するかにもよりますが、処理が遅い場合は書き方を変えて試してみてください。
ここまでの処理をまとめたものがサンプル02です。サンプル03はlength()メソッド※を使ってデータ項目の数を求めています。
●サンプル02
#target "Bridge"
text = '<?xml version="1.0" encoding="UTF-8" ?>';
text += '<list>';
text += '<data><title>Sample1</title></data>';
text += '<data><title>Sample2</title></data>';
text += '<data><title>Sample3</title><contents>ASCII.jp</contents></data>';
text += '</list>';
testXML = new XML(text);
var titleText = testXML.child(0).title[0].child(0);
alert(titleText.toString());
var cont = testXML.data[2].contents[0].child(0);
alert(cont.toString());
●サンプル03
#target "Bridge"
text = '<?xml version="1.0" encoding="UTF-8" ?>';
text += '<list>';
text += '<data><title>Sample1</title></data>';
text += '<data><title>Sample2</title></data>';
text += '<data><title>Sample3</title><contents>ASCII.jp</contents></data>';
text += '</list>';
testXML = new XML(text);
var n = testXML.data.length();
alert(n);
※WebブラウザーのJavaScriptではlengthプロパティですが、Bridgeの場合length()メソッドになります。