У меня есть веб-приложение, которое на данный момент выполняет вызов сервлета для получения списка участников. У каждого участника есть имя, идентификатор и идентификатор команды, к которой они принадлежат. Я форматирую 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, я замечаю, что «объект команды», похоже, хранится очень хорошо, и содержит как правильный идентификатор команды, так и полный список участников. Однако второй «командный объект» сломан. Затем я вмешиваюсь, чтобы увидеть, что происходит, когда он хранит этот второй элемент, и замечаю, что, когда он проверяет предполагаемую «команду» на наличие «членов», «this» объект, на который он ссылается, остается объектом «team», но поле teamId пустое, а поле members даже отсутствует. Таким образом, после неудачного добавления этого командного объекта в массив, он прекращает синтаксический анализ, оставляя мне один правильный и один неправильный элемент массива.
Я все еще относительно новичок в веб-программировании приложений, и я знаю, что было бы предпочтительнее использовать объект JSON, а не файл XML, но на данный момент это то, что я придумал , Кроме того, я не совсем уверен, почему этот второй элемент ломается, а первый нет. Если бы мне нужно было сделать предположение, «этот» объект после первого броска броска - это не то, что, я думаю, должен быть вторым. У кого-нибудь есть идеи, как я могу точно выяснить, что происходит, или, возможно, сразу увидеть мою логическую ошибку?