- ベストアンサー
XMLの空白要素をJavascriptのif文で条件分けする
JavascriptもXMLも始めたばかりの者です。 分からないことがあり、皆様にご教授頂ければと思い投稿しました。 XMLで生成したファイルから各要素を取り出してHTMLに置き換えるスクリプトをJavascriptで作ろうと思います。 ~XMLファイル~宣言省略 <links> <link> <url>http://www.○○○.com/</url> <title>○○○~</title> <ban>http://www.○○○.com/XX.gif</ban> </link> <link> <url>http://www.×××.com/</url> <title>×××~</title> <ban></ban>//←画像データ空欄 </link> </links> ~Javascript~前後省略 var a = obj.responseXML; var xmlDoc = a.documentElement; var links = xmlDoc.getElementById("links").length; for(var i=0; i<links; i++) { var link = xmlDoc.getElementsByTagName("link")[i].firstChild.nodeValue; var title = xmlDoc.getElementsByTagName("title")[i].firstChild.nodeValue; var image = xmlDoc.getElementsByTagName("image")[i].firstChild.nodeValue; var html = Html(link,title,image); } function Html(link,title,image) { ~中略~ if(image != ""){ html += '<a href="' + link + '"><img src="' + image + '" alt="' + title + '" /></a>'; } return html; } この後、html内の「<div id="html"></div>」に表示させるのですが、function Html(~)では、画像の有無は絶対条件ではない為if文で条件分けしています。 ですが、この「if(image != "")」で「has no properties」エラ-になります。 ちなみに空欄だった画像データ欄に文字列を入れるときちんと動作します。 XMLタグに文字列が入らない場合、配列には""(空)が返されないのでしょうか? 何か良い方法はありましたら、よろしくご教授くださいませ。 よろしくお願いいたします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
エラーですが、 if(image != "") ではなくて var image = xmlDoc.getElementsByTagName("image")[i].firstChild.nodeValue; のところで起こってませんか? そうであればfirstChildの中身がnullなのでnodeValueにアクセスできないということです。nullチェックして、nullならimage=""で結構かと。
その他の回答 (2)
ご質問のXMLには、<image>という名前のタグは、見当たらないのですが・・・? 判定自体は、たぶん間違っていないと思います。
お礼
ご回答いただきありがとうございます。 ご指摘のとおり、<image>ではなく<ban>が空値のときの条件分けです。失礼いたしました。
- talepanda
- ベストアンサー率58% (45/77)
試してないので、曖昧な記憶と勘ですが if(image != ""){ ではなく if(image != null && image != ""){ もしくは if(!image){ でいいんじゃないですか? firstChild.nodeValueは空文字("")ではなくnullを返してると思いますよ。 曖昧な記憶と勘ですが。
お礼
ご回答ありがとうございました。御礼が遅れてすみません。 教えていただいた応報で試してみたのですが、やはり同じエラーが帰ってきました。 もうちょっといろいろ試してみようと思います。
お礼
仰るとおり、firstChildが「no has properties」だと言うエラーでした。 そこでfirstChildがnullかそうでないかを判定させる式を入れてみたら問題が解決いたしました。 ありがとうございました。