2016-08-01 15 views
0

私はこの問題を解決するために、コードを削除して物事を壊してしまったためです。私は特定の教会の画像を見たいだけです。jQueryでxml子ノードの属性を取得する

xmlファイル:

<churches> 
<church> 
     <data-name>germanevangelical</data-name> 
     <name>German Evangelical</name> 
     <address>501 Elm St.</address> 
     <opened>1887</opened> 
     <neighborhood>East</neighborhood> 
     <region>East</region> 
     <architecture>Gothic</architecture> 
     <denomination>Evangelical Lutheran</denomination> 
     <closed>2006</closed> 
     <image caption="Mary Smith">image_1_forweb.jpg</image> 
     <image caption="Mary Smith">image_2_forweb.jpg</image> 
     <image caption="Mary Smith">image_3_forweb.jpg</image> 
</church> 
... (more church nodes) 
</churches> 

私はjQueryを使って画像のキャプションにアクセスしたいです。ここで

は私のコードですが、それはキャプションに「未定義」を返すだ:

var cName = 'germanevangelical'; 
$.ajax({ 
       type: "GET", 
       url: "churchdata.xml", 
       dataType: "xml", 
       success: function(xml) { 
       var name = $(xml).find("data-name"); //get church names from xml file 
       $(name).each(function(id, item) { 
        if ($(item).text() == cName) { //find the right church in the xml file 
         $(item).parent().find("image").each(function(id, node) { 
          console.log('id: ' + $(node).attr('caption'));//undefined 
         }) 
        }//end if right church in xml file 
       }) 
       } 
      }); 

誰も私が間違ってやっているかを見ることができますしてください?

+0

は ''すでにdataType'がxml' 'に設定されている'#のdocument'として解析xml'ですか?また、 '.each()'で ')'を閉じることができません。 – guest271314

+0

OK、私はばかです。私はクリックした教会のために書かれた属性を持っていませんでした。私はその上の教会の属性を持っていました。人間のエラーは過小評価することはできません.... – LauraNMS

答えて

0

解析中にajaxコードに間違いがありますが、 "data-name"を見つけるときに$ xmlの代わりに$ xmlを使用してください。以下のコードをチェックしてください。あなたのページをクロームで実行し、デベロッパーツールにエラーがないかどうかチェックしてください。

var cName = 'germanevangelical'; 
$.ajax({ 
type: "GET", 
    url: "churchdata.xml", 
    dataType: "xml", 
    success: function (xml) { 
    var xmlDoc = $.parseXML(xml), 
    $xml = $(xmlDoc); 
    var name = $xml.find("data-name"); //get church names from xml file 
     $(name).each(function(id,item) { 
       if ($(item).text() == cName) { 
       $(item).parent().find("image").each(function(id,node) { 
        console.log('id: ' + $(node).attr('caption')); //undefined 
       }); 
       } 
     }); 
     } 
}); 
+0

これは結果に違いはありませんでしたが、ありがとう。 – LauraNMS

+0

私のコードをコピーして試してみることができますか?あなたのコードにもいくつかタイプエラーがあります。 – CNKR

+0

あなたの答えはうまくいきましたが、教会名が変数と一致するかどうかを確認するコードを追加したとき、私はもはや "image"の属性にアクセスできなくなりました。 – LauraNMS

0

$.parseXML()$.ajax()dataType"xml"に設定されている場合XMLDocument$.ajax()コールのsuccessxmlとして返されるべきであり、必要ではありません。

また、)での.each()の終了は、質問でjavascriptを呼び出します。

$.ajax({ 
    type: "GET", 
    url: "churchdata.xml", 
    dataType: "xml", 
    success: function(xml) { 
    console.log(xml); 
    var name = $(xml).find("data-name"); //get church names from xml file 
    $(name).each(function(id, item) { 
     $(item).parent().find("image").each(function(id, node) { 
     console.log('id: ' + $(node).attr('caption')); 
     }) 
    }) 
    } 
}); 

plnkr http://plnkr.co/edit/HYaaxN0EY0JtkciBMJpl?p=preview

+0

私のコードに教会が私の変数とマッチしているかどうかを調べるまで、これはうまくいった(上記参照)。これで属性は返されません。どんなアイデアをお願いしますか? – LauraNMS

+0

@LauraNMS _ "これは、教会が私の変数にマッチしたかどうかを私のコードに書き込むまで働いていましたが(上記参照)、属性は戻っていません。 plnkrのバージョン2で期待される結果を返すようになる – guest271314

+0

問題は、私のXMLのそのノードにキャプションを入れなかったことです!愚かな人間の誤り。ご協力ありがとうございました! – LauraNMS

関連する問題