dポイントプレゼントキャンペーン実施中!

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タグに文字列が入らない場合、配列には""(空)が返されないのでしょうか?
何か良い方法はありましたら、よろしくご教授くださいませ。
よろしくお願いいたします。

A 回答 (3件)

エラーですが、



if(image != "")

ではなくて

var image = xmlDoc.getElementsByTagName("image")[i].firstChild.nodeValue;

のところで起こってませんか?

そうであればfirstChildの中身がnullなのでnodeValueにアクセスできないということです。nullチェックして、nullならimage=""で結構かと。
    • good
    • 0
この回答へのお礼

仰るとおり、firstChildが「no has properties」だと言うエラーでした。

そこでfirstChildがnullかそうでないかを判定させる式を入れてみたら問題が解決いたしました。

ありがとうございました。

お礼日時:2006/08/18 22:34

ご質問のXMLには、<image>という名前のタグは、見当たらないのですが・・・?



判定自体は、たぶん間違っていないと思います。

参考URL:http://gentzen.math.hc.keio.ac.jp/JavaScript/day …
    • good
    • 0
この回答へのお礼

ご回答いただきありがとうございます。

ご指摘のとおり、<image>ではなく<ban>が空値のときの条件分けです。失礼いたしました。

お礼日時:2006/08/18 22:07

試してないので、曖昧な記憶と勘ですが



if(image != ""){

ではなく

if(image != null && image != ""){

もしくは

if(!image){

でいいんじゃないですか?

firstChild.nodeValueは空文字("")ではなくnullを返してると思いますよ。

曖昧な記憶と勘ですが。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。御礼が遅れてすみません。

教えていただいた応報で試してみたのですが、やはり同じエラーが帰ってきました。

もうちょっといろいろ試してみようと思います。

お礼日時:2006/08/17 14:20

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!