HttpXMLRequest卡住了

时间:2012-12-21 16:22:50

标签: javascript

我只是想尝试使用JS中的HttpXMLRequest对象,并且我有一个基本循环,它从XML文件加载名称和年龄并将其抛入表中。如果每个兄弟都具有相同的值,那么它会加载正常,但是如果兄弟中缺少其中一个元素,它会停止而不是仅仅跳过它。这是一些代码。

HTML -

(The rest of the XML parser and DTD, html, body etc is up here)
<script>
var x=xmlDoc.getElementsByTagName("person");

document.write("<table border='1'>");
for (i=0;i<x.length;i++)
  { 
  var name = x[i].getElementsByTagName("name")[0].childNodes[0].nodeValue;
  var age = x[i].getElementsByTagName("age")[0].childNodes[0].nodeValue;

  document.write("<tr>");
  document.write("<td>"+name+"</td>");
  document.write("<td>"+age+"</td>");
  document.write("</tr>");
  }
document.write("</table>");
</script>

XML -

(The DTD and stuff it up here)
<people>
  <person>
    <name>Jim</name>
    <age>20</age>
  </person>
  <person>
    <name>Bob</name>
  </person>
  <person>
    <name>Tom</name>
    <age>20</age>
  </person>
  <person>
    <name>James</name>
    <age>20</age>
  </person>
  <person>
    <name>Richie</name>
    <age>20</age>
  </person>
</people>

从那个例子开始,一旦它到达bob,HTML就会停止写入,我认为每个名称和年龄都需要一个try / catch或if,但我似乎无法将其放置有用。有人有任何想法吗?

我试图搜索,但我不知道这个问题叫什么,描述它没有提出任何问题。

简单地添加“<age /><age></age>”不是一个选项,最终我将使用大量的xml文件。除非我需要写一些会自动添加它的东西,如果它不存在,我认为这是可以接受的。

干杯Hombries。

1 个答案:

答案 0 :(得分:1)

在尝试访问其子节点之前检查元素是否存在:

var personElem = x[i];

var ageElems = personElem.getElementsByTagName("age");

var age = ageElems.length
        ? ageElems[0].firstChild.nodeValue
        : '';

顺便说一句,使用JSON而不是XML通常更容易。使用JSON,您的响应可能如下所示:

{
    "people": [
        {
            "name" : "Jim",
            "age" : 20
        },
        {
            "name" : "Bob"
        }
    ]
}

您可以使用点语法访问项目:

var age = data.people[0].age;

例如,PHP具有用于编码JSON的内置函数:json_encode()