JQuery XML解析多级相同的元素

时间:2013-04-05 15:24:08

标签: jquery xml parsing multi-level

这是我在这里的第一个问题,我对网络开发世界很陌生。我有一个简单的问题,所以我不想用我的所有代码来惹恼你,我会告诉你一个更简单的例子:

我有一个看起来像这样的XML,我们称之为“example.xml”:

<a>
   <b>1</b>
   <a>
      <b>2</b>
      <c>3</c>
   </a>
</a>

所以有多个'a'包含或不包含'c'元素。当我使用

解析此xml时
$.ajax({type: "GET",async: false, cache: false, url: "example.xml",dataType: "xml",success: parseXml,  error: function(xhr, status, error) {alert(error)}});

parseXml会像这样:

function parseXml(xml){
    var result = new Object()
    $(xml).find('a').each(function(){
       result.b = $(this).find('b:first').text()
       result.c = $(this).find('c:first').text()
    }
}

所以我的问题是这个JQuery会在第一级'a'中找到'c',即使没有。我认为它会在第二个'a'内搜索以找到'c'。这就是为什么我需要在find()函数中添加“:first:”以便它不会返回第二个'b'......我认为这不是最好的方法,因为如果'b'在第二级'a'之后被宣布,我会得到第二级'b'而不是...我不知道你是否跟随但这里将是我的问题:

  1. 这是一个提议者XML文件吗?
  2. 如果不是,假设我无法更改它,我怎样才能获得一个不能从二级获取其信息的propoper XML解析器?
  3. 非常感谢你的帮助!

1 个答案:

答案 0 :(得分:2)

尝试可以使用.children仅在直接子项中搜索

function parseXml(xml){
    var result = new Object()
    $(xml).find('a').each(function(){
       result.b = $(this).children('b').text()
       result.c = $(this).children('c').text()
    }
}

.find()将搜索所有级别的后代

  

获取当前匹配组中每个元素的后代   元素,由选择器,jQuery对象或元素过滤。