在jquery中解析XML的级别

时间:2012-06-04 16:50:25

标签: jquery xml xml-parsing

这是我的XML。我将获得许多学位,每个学位将有许多学校,每个学校将有许多专业。 Page将提供三个下拉菜单。我并不是要求所有代码都预先形成所有onclicks嵌套下拉列表更新。 (除非某人有一些很酷的复发模式,否则会起作用。

我遇到的这个问题是当我从Degrees节点请求学位并将文本()添加到下拉列表中时,我从学位,学校,规范中获取所有文本...所以我想要的是一个下拉菜单与“1级”,但我得到“学位1学校1规格...”,我相信你明白了,我尝试添加“Degrees.filter,和孩子们”,但后来我什么都没得到。

我需要了解如何一次一次地使用嵌套节点解析XML。

感谢您的时间。

<Degrees>
  <Degree>
  Degree 1
  <Schools>
    <School>School 1
      <Specializations>
       <Specialization>Specialization 1</Specialization>
       <Specialization>Specialization 2</Specialization>
      </Specializations>
    </School>
    <School>School 2
      <Specializations>
       <Specialization>Specialization 3</Specialization>
       <Specialization>Specialization 4</Specialization>
      </Specializations>
    </School>
  </Schools>
  </Degree>
</Degrees>

当前的jQuery

var Degrees = $(PID).find('Degrees');
    Degrees.find("Degree").filter("Degree").each(function () {
    var select = $('#degree');
    var value = $(this).text();
    select.append("<option value='" + value + "'>" + value + "</option>");
    });

HTML

<select id="degree">
    <option value="" selected="selected">-- Select Degree --</option>
</select>

1 个答案:

答案 0 :(得分:0)

这是我最终做的事情,这也允许我对下拉列表进行排序。如果有人有任何其他想法,请评论。

var degreelist = new Array();
                $(xml).find('PID[id="' + PID + '"] Degrees Degree').each(function () {
                    var Item = new Object();
                    Item.Id = $(this).attr("id");
                    Item.value = $(xml).find('Degrees Degree[id=' + Item.Id + ']').text();
                    degreelist.push(Item);
                });

                degreelist.sort(function (a, b) {
                    if (a.value.text > b.value.text) return 1;
                    else if (a.value.text < b.value.text) return -1;
                    else return 0
                })

                for (var i = 0; i < degreelist.length; i++) {
                    $('#degree').append("<option value='" + degreelist[i].Id + "'>" + degreelist[i].value + "</option>");
                }