2009-12-18 143 views
0

我正在使用jQuery在我的页面上使用$.ajax()解析XML。我的代码块在下面,我可以得到这个工作,以显示在XML文件中说每个结果,但我有麻烦,因为每个部分可以有更多的一个<course>和即时试图打印所有属于一个学生的成绩。这是一个XML的例子。通过jQuery解析XML,嵌套循环

<student num="505"> 
    <name gender="male">Al Einstein</name> 
    <course cid="1">60</course> 
    <course cid="2">60</course> 
    <course cid="3">40</course> 
    <course cid="4">55</course> 
    <comments>Lucky if he makes it to lab, hopeless.</comments> 
</student> 

当你看到<course>我试图得到的结果打印作业成绩每门课程每个学生。任何想法,我会做什么?

$.ajax({ 
      type: "GET", 
      url: "final_exam.xml", 
      dataType: "xml", 
      success: function(xml) { 
       var student_list = $('#student-list'); 
       $(xml).find('student').each(function(){ 
        $(xml).find('course').each(function(){ 
         gradeArray = $(this).text(); 
         console.log(gradeArray); 
        }); 
        var name = $(this).find("name").text(); 
        var grade = $(this).find("course").text(); 
        var cid = $(this).find("course").attr("cid"); 

        //console.log(cid); 
        student_list.append("<tr><td>"+name+"</td><td>"+cid+"</td><td>"+grade+"</td></tr>"); 
       }); 
      } 
     }); 

回答

1

在此行中:$(xml).find('course').each(function(){

您的意思是findxml或者应该说是$(this).find

+0

它应该是:$(this).find - 但这似乎仍不能解决它。它基本上是:一个学生可以有很多成绩。并试图展示...感谢你! – Coughlin 2009-12-18 17:55:05

0

很确定你正在寻找这个。我所做的只是在数组中捕获成绩,并在最后通过逗号加入。我也没有测试(邪恶)。

$.ajax({ 
    type: "GET", 
    url: "final_exam.xml", 
    dataType: "xml", 
    success: function(xml) { 
     var student_list = $('#student-list'); 
     $(xml).find("student").each(function(){ 

      var name = $(this).find("name").text(); 
      var grades = []; 
      var cid = $(this).find("course").attr("cid"); 

      $(this).find('course').each(function(){ 
       var grade = $(this).text(); 
       console.log(gradeArray); 
       grades[ grades.length ] = grade 
      }); 

      //console.log(cid); 

      student_list.append("<tr><td>"+name+"</td><td>"+cid+"</td><td>"+grades.join(', ')+"</td></tr>"); 
     }); 
    } 
});