0

構文エラーがあるかどうかはわかりませんが、コンパイラは私に与えています

TypeError: 'undefined' はオブジェクトではありません ('xmlDoc.getElementsByTagName("icon")[count].childNodes' を評価しています)

私の実際のJavaScriptコードはこのようなものXMLですserver

var xmlDoc = Obj.responseXML;
var count = 0;
if(xmlDoc){
    while(count <= xmlDoc.getElementsByTagName("item").length){
    document.getElementById("flow").innerHTML += "<div class='item'><img class='content' src='" + xmlDoc.getElementsByTagName("icon")[count].childNodes[0].nodeValue.replace(/\s+$/g,' ') +"' /></div>";
    count++;
    }
       }else{
           alert("Unable to parse!");
       }

私のXMLは次のようになります。

<feed>
<item>
<title>Given Title</title>
<icon>
http://i178.photobucket.com/albums/w255/ace003_album/Logo-ETC-RGB-e1353503652739.jpg
</icon>
</item>
<item>...</item>
<item>...</item>
<item>...</item>
<item>...</item>
<item>...</item>
<item>...</item>
</feed>

画像リンクを解析して表示したいだけです。DOM パーサー

 var url = "http://myURL.com/document.xml";
        if (window.XMLHttpRequest)
          {// code for IE7+, Firefox, Chrome, Opera, Safari
          Obj = new XMLHttpRequest();
          }
        else
          {
          Obj = new ActiveXObject("Microsoft.XMLHTTP");
          }

        Obj.open("POST",url,false);
        Obj.setRequestHeader("Content-type","application/x-www-form-urlencoded");
        Obj.send();
4

1 に答える 1

1

デモ

<まず、 while ループ条件はnotである必要があります<=。後者を使用すると、ループが何度も実行され、インデックスが範囲外であるためエラーが発生します。

次に、while ループでは、ドキュメントのルートから にicon基づいて要素を取得しています。counticonそれぞれの子であるため、 notを使用してに対する相対をitem取得する必要があります。iconitemitem.getElementsByTagName('icon')[0]xmlDoc.getElementsByTagName('icon')[count]

問題とは関係ありませんが、HTML をそのような文字列として構築することは望ましくありません。エスケープを処理する必要がないため、要素を作成して DOM に挿入する方がよいでしょう。flowまた、反復ごとに検索するのではなく、しばらく前にへの参照を保存します。

var div;
var img;
var flow = document.getElementById('flow');
var items = xmlDoc.getElementsByTagName("item");

while(count < items.length){
    div = document.createElement('div');
    div.className = 'item';

    img = document.createElement('img');
    img.className = 'content';
    img.src = items[count].getElementsByTagName("icon")[0].childNodes[0].nodeValue.replace(/\s+$/g,' ');

    div.appendChild(img);
    flow.appendChild(div);
    count++;
}
于 2013-10-25T15:52:08.673 に答える