2013-04-05 140 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