2010-12-12 136 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(); 
    } 
}); 

或类似的东西反正。