0

我不知道我是否有语法错误,但编译器给了我

TypeError:'undefined' 不是对象(评估 'xmlDoc.getElementsByTagName("icon")[count].childNodes')

当我解析XML来自我的时,我给了我这个问题server,我的实际 javascript 代码是这样的

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元素。count是每个的icon孩子,所以你应该使用not来item检索icon相对的。itemitem.getElementsByTagName('icon')[0]xmlDoc.getElementsByTagName('icon')[count]

与问题无关,但将 HTML 构建为这样的字符串是不可取的。创建元素并将它们插入 DOM 会更好,因为您不需要处理任何转义。此外,在 while 之前存储对的引用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 回答