2013-04-05 84 views
0

这是我的第一个问题,我对web开发世界很陌生。我有一个简单的问题,所以我不想用我所有的代码惹恼你,我会让你更简单的例子:JQuery XML解析多层同一元素

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

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

所以有多层次的'a'包含或不包含'c'元素。当我解析使用

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

parseXml这个XML会是这样的:

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会发现一个“C”到“A”,即使第一级那没有。我认为它在第二个'a'内搜索找到'c'。这就是为什么我需要在find()函数中添加“:first:”,以便它不会返回第二个'b'......我认为这不是最好的方法,因为如果'b'在第二级别'a'后宣布,我会得到第二级别'B',而不是...我不知道你是否在跟随,但这里是我的问题:

  1. 这是一个提议者XML文件?
  2. 如果不是,假设我无法更改它,那么如何获得不会从第二级获取其信息的propoper XML解析器?

非常感谢您的帮助!

回答

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对象或元素。

+0

太棒了!谢谢! – user2249604 2013-04-05 15:57:21