<route>
<transportation name="metoro-ochanomizu">
<station>
<trans_name>東京メトロ 丸の内線</trans_name>
<station_name>御茶ノ水駅</station_name>
</station>
</transportation>
</route>
上のXMLを読み込んで、trans_nameタグとsationタグの値を取得したいと考えております。
下のコードで動かすと、FireFoxでは取得できるのですが、IE6.0ではundefinedとなってしまいます。
公開されているライブラリは使わずに実装したく、FireFoxとIEで動作するものを必要としています。
var routemapTag = httpRequest.responseXML.getElementsByTagName("routemap")[0];
for ( r=0; r< routemapTag.childNodes.length; r++){
// 経路一つを取り出す
var transportationTag = routemapTag.childNodes[r];
// 属性を取れなければ空タグだと判断して飛ばす
if ( transportationTag.attributes == null ) {
continue;
}
// stationタグを取り出す
var stationTag =routemapTag .getElementsByTagName("station")[0];
route.trans_name = routemapTag .getElementsByTagName("trans_name")[0].textContent;
route.station_name = routemapTag .getElementsByTagName("station_name")[0].textContent;
http://q.hatena.ne.jp/ URLはダミーです。
routemapが突然出てきて、よくわかりませんが、単純にtextContentをIEがサポートしていないので、動かないのではないのかと思います。
node.textContentを(node.firstChild ? node.firstChild.nodeValue : '')にすればいいかと。
一応、自分のテストコードを晒しておきます。
onload = function (req) { function getTextContent(node) { return (node.firstChild ? node.firstChild.nodeValue : ''); } var route = {}, transportationTags = req.responseXML.getElementsByTagName('route')[0].getElementsByTagName('transportation'); for (var i = 0, transportationTag; transportationTag = transportationTags[i]; ++i) { if (!!transportationTag.attributes) { var stationTag = transportationTag.getElementsByTagName('station')[0]; route.trans_name = getTextContent(stationTag.getElementsByTagName('trans_name')[0]); route.station_name = getTextContent(stationTag.getElementsByTagName('station_name')[0]); } } res.innerHTML = route.trans_name + ', ' + route.station_name; };
コメント(0件)