我有一个Web应用程序,截至目前,它调用servlet来检索成员列表。每个成员都有一个名称,ID和他们所属的团队的ID。我将此servlet返回的XML文件格式化为如下所示:
<xml>
<team>
<id>1</id>
<member>
<id>37</id>
<name>Bill</name>
</member>
<member>
<id>45</id>
<name>John</name>
</member>
</team>
<team>
<id>2</id>
<member>
<id>71</id>
<name>Kevin</name>
</member>
</team>
<team>
<id>3</id>
<member>
<id>12</id>
<name>Dave</name>
</member>
<member>
<id>29</id>
<name>Tom</name>
</member>
<member>
<id>92</id>
<name>Pete</name>
</member>
</team>
</xml>
为了解析这个XML文件,我使用了以下jQuery代码:
$.get("servlet", { command: "getMembers" }, function(data) {
var teams = new Array();
$(data).find("team").each(function() {
var members = new Array();
$(this).find("member").each(function() {
members.push({
id: $(this).find("id").text(),
name: $(this).find("name").text()
});
});
teams.push({
id: $(this).find("id").text(),
members: members
});
});
console.log(teams);
}, "xml").error(function() { console.log("Error"); });
当我逐步完成解析XML的过程时,我注意到“团队对象”似乎存储得很好,包含团队的正确ID和完整的成员列表。但是,第二个“团队对象”被打破了。然后我介入,看看当它存储第二个元素时会发生什么,并注意到当它检查所谓的“团队”是否为“成员”时,它引用的“this”对象仍然是“团队”对象,但teamId字段为空,成员字段甚至不存在。因此,在未能将此团队对象添加到数组之后,它会突破解析,从而留下一个正确且一个不正确的数组元素。
我对基于Web的应用程序编程还是比较陌生的,我知道使用JSON对象而不是XML文件会是首选,但暂时,这就是我想出来的。同样,我不完全确定为什么第二个元素在第一个元素没有时会破坏。如果我不得不猜测,第一次投掷后的“this”对象并不是我认为它应该是第二次。有没有人知道如何弄清楚到底发生了什么,或者看到我的逻辑错误?