- ベストアンサー
XMLをAjax経由で取得した要素にアクセスできない
- XMLをAjax経由で受け取り、JavaScript内で処理をした際、特定の要素にアクセスできない問題が発生しています。
- 具体的には、XML内の<jcity></jcity>のタグを繰り返しで表示させたいが、何も表示されない状態です。
- 原因や解決策についてご教授いただけますか。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Q3904978 TestCase 1</title> <script type="text/javascript" src="prototype-1.6.0.2.js"></script> <script type="text/javascript"> function rssFeed() { var myAjax = new Ajax.Request( 'Q3904978-1.php', { method: 'GET', onSuccess: showResponse, onFailure: errorFunc } ); } function showResponse(req) { r = req.responseXML; $A(r.getElementsByTagName('item')).each(function(e) { //個人的に混乱しないように前と後の変数名を変えておく alert(e.getElementsByTagName("*")[0].childNodes[0].nodeValue); }); //言っておくが,e.childNodes[0]は「改行1つ」をnodeValueに持つテキストノードな //今回は,item要素の中で「全ての要素」(テキストノードを含まない)のセット //の0番目(jcity要素)のchildNodes[0](テキストノード)のnodeValueを取ってきたから //「千代田区」が表示される。 //まあ,ぶっちゃけた話, //alert(e.getElementsByTagName("*")[0].childNodes[0].nodeValue); //よりも //alert(e.getElementsByTagName("jcity")[0].childNodes[0].nodeValue); //の方が自然。 //俺が最も好きなのはXPathを使うパターン。どっかで実装を拾ってこなきゃいけないのが面倒くさそうだが。 //なお,このコードはwell-formedであるが,教えてgooの仕様により //well-formedでなくなって動かないかもしれない。その時は適宜編集して使うこと } function errorFunc(){ //きちんと定義 alert("error"); } </script> </head> <body onload="rssFeed();"> </body> </html>
お礼
無事に意図した動作をさせる事ができました!ありがとうございます。 DOMの考え方が曖昧だった部分が少しクリアになりました。XPathについては初めて聞いたので調べてみましたが、もっと直感的な記述ができそうですね。勉強してみたいと思います。