0

我只是尝试在 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。

4

1 回答 1

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().

于 2012-12-21T16:26:30.537 回答