2011-06-22 18 views
0

XMLのDOM内の空の#textハンドル:あなたが見ることができるように、すべてのitemタグが子供type, name, author, contentを持って私は、次の形式のXMLドキュメント持っ

<root> 
    <item> 
     <type>link</type> 
     <name>Nyan Cat!</name> 
     <author></author> 
     <content>http://nyan.cat/</content> 
    </item> 

    <item> 
     <type>quote</type> 
     <name>Belief and Intelligence</name> 
     <author>Robert Anton Wilson</author> 
     <content>Belief is the death of intelligence.</content> 
    </item> 
</root> 

を、しかし、いくつかのケースのために、authorタグが含まれている場合があります空の#textの子です。 Javascriptのファイルで

、私はitem DOM要素からこれらのタグのテキスト値を取得するために、次のコードを持っている:

this.type = item.getElementsByTagName("type")[0].childNodes[0].nodeValue; 
this.name = item.getElementsByTagName("name")[0].childNodes[0].nodeValue; 
this.author = item.getElementsByTagName("author")[0].childNodes[0].nodeValue; 
this.content = item.getElementsByTagName("content")[0].childNodes[0].nodeValue; 

変数item<item>タグのDOM要素です。作成者が空でない場合、コードは正常に実行されますが、authorが空の場合、コードは実行されません。これをどうすれば解決できますか? authorが空の場合、そのノードの値を空の文字列""にします。

答えて

3

ツリーの各プロパティで「未定義」をチェックする必要があります。以下のように:あなたがnullまたは未定義であるのjavascriptのプロパティにアクセスしようとした場合

if(typeof (element) == "undefined"){ //set var to empty string }

、スクリプトはその行で失敗し、それの後に任意の行を実行しません。失敗を回避するために

、あなたがtry{}catch(e){}

+0

また、それはに価値があります if(typeof(element)== "undefined" ||要素!= null){//この値を持つ何かを実行する} nullをチェックしないと、コードが上がる可能性があります。 – rav

2

に失敗する可能性があり、コードのこれらのブロックをラップすることができ、私はあなたが著者が持っていないどのように多くのchildNodes確認すべきだと思う:

if (item.getElementsByTagName("author")[0].childNodes.length == 0) { 
    this.author = ''; 
} else { 
    this.author = item.getElementsByTagName("author")[0].childNodes[0].nodeValue; 
} 
関連する問題