gadgets.io.makeRequest をDOMで使う

mixiアプリでゲームスコアをxmlを通じて取得。

他のドキュメントを見ても、DOMで取得した後の処理が書いていないので少し悩む。
下記のように遠回りして解決。

1.なぜかContentType.TXTで、一度textからdomに変換しようとしていた。
そのため、DOMパーサーを使用したりで、結局IEFirefoxの違いで分岐させたりなど面倒。
(参考1)
2.dom.getElementsByTagName("mixi_account_name")[0].textContent をテキストで出力していたが、
textContentはFireFoxだけでIEで使用できないとのこと。無駄にinnerTextでIEに対応させたりで面倒。
(参考2)
3.結局すべての文字情報を一旦配列にいれて・・firstChild.nodeValueで文字を取得したことで、解決。
(本文)


参考1.

//DOMパーサー
function parseXml(xmlText) {
	if (window.ActiveXObject) {
		var domDoc = new ActiveXObject('Microsoft.XMLDOM');
		domDoc.async = false;
		domDoc.loadXML(xmlText);
		return domDoc;
	}else if(window.DOMParser) {
		var domParser = new DOMParser();
		return domParser.parseFromString(xmlText, "application/xml");
	}else {
		return null;
	}
}

参考2.

if (/MSIE/.test(navigator.userAgent)){
	document.getElementById("d2").innerText = "<b>aaa</a>";
	alert("MSIE"); // 確認用アラート
} else if (/Firefox/.test(navigator.userAgent)){
	document.getElementById("d2").textContent = "<b>aaa</a>";
	alert("Firefox"); // 確認用アラート
}

本文===>>

var url = "http://.../...xml";
	var params = {};

	//期待するコンテンツは XML ファイル
	params[gadgets.io.RequestParameters.CONTENT_TYPE] = gadgets.io.ContentType.DOM;

	//キャッシュする時間を設定する
	params[gadgets.io.RequestParameters.REFRESH_INTERVAL] = 0;

	//署名は付与しない NONE
	params[gadgets.io.RequestParameters.AUTHORIZATION] = gadgets.io.AuthorizationType.NONE;

	gadgets.io.makeRequest(url, function(response) {

		var dom = response.data;

		//XML内の"mixi_account_name"という名前のタグ(要素)の配列を作る
		var mixi_account_name = dom.getElementsByTagName("mixi_account_name")

		//XML内の"max_count"という名前のタグ(要素)の配列を作る
		var max_count = dom.getElementsByTagName("max_count")

		//XML内の"all_count"という名前のタグ(要素)の配列を作る
		var all_count = dom.getElementsByTagName("all_count")

		//XML内の"game_count"という名前のタグ(要素)の配列を作る
		var game_count = dom.getElementsByTagName("game_count")

		//XML内の"score"という名前のタグ(要素)の配列を作る
		var scores = dom.getElementsByTagName("score");

		//tableタグを作成
		html  = '上位30人を表示中';
		html += '<table width="940" border="0" id="table-01" class="sortable"><thead><tr>';
		html += '<th class="nosort">ランク</th><th>名前</th><th>最大得点</th><th>累計得点</th><th>挑戦回数</th>';
		html += '</tr></thead><tbody>';

		for (var i=0; i<scores.length; i++){
			var rank = i + 1;
			html += '<tr><td>' + rank + '</td>';
     		html += '<td>' + mixi_account_name[i].firstChild.nodeValue + '</td>';
    		html += '<td>' + max_count[i].firstChild.nodeValue + '</td>';
    		html += '<td>' + all_count[i].firstChild.nodeValue + '</td>';
    		html += '<td>' + game_count[i].firstChild.nodeValue + '</td>';
      		html += '</tr>';
			}

		html += '</tbody></table>';

		//divを置き換え
		document.getElementById("datalist").innerHTML = html;

	}, params);