2010-12-12 162 views
1

這有點厚臉皮,我切實要求你編寫代碼爲我,但我有很難從XML結果jQuery的XML解析

這裏提取某些數據是XML

<?xml version="1.0" encoding="UTF-8" ?> 
<GeocodeResponse> 
    <status>OK</status> 
    <result> 
     <type>route</type> 
     <address_component> 
      <long_name>xxxxxxxxxxx</long_name> 
      <short_name>xxxxxxxxxxx</short_name> 
      <type>administrative_area_level_3</type> 
      <type>political</type> 
     </address_component> 
    </result> 
    <result> 
     <type>postal_code</type> 
     <address_component> 
      <long_name>xxxxxxxxxxx</long_name> 
      <short_name>xxxxxxxxxxx</short_name> 
      <type>administrative_area_level_2</type> 
      <type>political</type> 
     </address_component> 
    </result> 
</GeocodeResponse> 

我怎樣才能得到類型administrative_area_level_3在address_component結果類型路線與jQuery的long_name?

+0

最後一行應該是閉標籤'',對不對? – Pointy 2010-12-12 14:53:31

+0

是的,編輯我的問題,以反映它 – nLL 2010-12-12 14:54:40

回答

2

這應該爲你

 
$(document).ready(function() { 
    $.ajax({ 
     type: "GET", 
     dataType: "xml", 
     url: "XMLFile.xml", 
     success: function (xml) { 
      $(xml).find('type').each(function() { // find all "type" tag in XML 
       if ($(this).text() == 'administrative_area_level_3') { // in here $(this) is our "type" tag 
        var result = $(this).parent().find('long_name').text(); // get result 
        $('#result').html('The Result is: ' + result) // write result 
       } 
      }) 
     } 
    }) 
}) 

活生生的例子工作here

+0

謝謝,它工作正常,但不是在firefox或佩拉虛擬XML響應。沒有錯誤就沒有任何反應 – nLL 2010-12-12 15:45:19

+0

這很奇怪。我用Firebug在Firefox上編寫並測試了這段代碼。 – Fatih 2010-12-12 15:47:46

+0

我很抱歉,但這個例子正在所有的瀏覽器上工作。 Firefox Chrome Opera IE9 IE8。我無法在Safari上進行測試,但我認爲它可以在其上進行測試,因爲Safari是一款類似Chrome的網絡瀏覽器瀏覽器,並且正在使用Chrome。 – Fatih 2010-12-12 15:50:24

0

首先,jQuery本身並不真正解析XML —它可以讓瀏覽器做到這一點。它可以創建一個DOM片段,然後它允許您檢查它。因此,如果你的XML是一個字符串,你可以使用:

var xml = $(xmlString); 

然後,你可以這樣做:

var longName = null; 

xml.children('result').each(function() { 
    if ($(this).children('type').text() === 'route') { 
    var addr = $(this).find('address_component'); 
    if (addr.find('type').filter(function() { return this.innerHTML === 'administrative_area_level_3'; }).length()) 
     longName = addr.children('long_name').text(); 
    } 
}); 

或類似的東西反正。