我只是想尝试使用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。
答案 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()
。