jQuery.Each()在通过XML迭代时遇到问题

时间:2012-01-14 00:21:19

标签: jquery xml-parsing iteration this each

我有一个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”对象并不是我认为它应该是第二次。有没有人知道如何弄清楚到底发生了什么,或者看到我的逻辑错误?

0 个答案:

没有答案