2015-06-25 4 views
2

Я запрашиваю внешний api, и он дает ответ ниже. Он находится в формате XML.Как разобрать xml-ответ

Вот так, как я использую, чтобы запросить

$('#trigger').click(function() 
{ 
var token = '662d3330f192b4af77d5eef8de58f7e8c01a12a7'; 
var location = $('#Address').val(); 
var lat = $('#latitude').val(); 
var long = $('#longitude').val(); 
$.ajax({ 
    url: 'https://api.quickblox.com/data/Location', 
    data: { 
     token:'2100d8b55d4a389470b849de9378093dcda12903' 
    }, 
    method: 'get', 

    success: function(xml) { 
     console.log(xml); 
    } 
}); 
}); 

А вот ответ я получил от сервера.

#document 
<data type="array" class_name="Location" skip="0" limit="0"> 
    <Location> 
    <_id>558a8325535c1246bb00d5c5</_id> 
    <_parent_id>test-api</_parent_id> 
    <created-at type="integer">1435140901</created-at> 
    <lat type="float">11.0270643</lat> 
    <location>Avarampalayam, Coimbatore, Tamil Nadu, India</location> 
    <long type="float">76.9830277</long> 
    <updated-at type="integer">1435140901</updated-at> 
    <user-id type="integer">3566216</user-id> 
    </Location> 
    <Location> 
    <_id>558a83dd535c12843900dbbe</_id> 
    <_parent_id>test-api</_parent_id> 
    <created-at type="integer">1435141085</created-at> 
    <lat type="float">11.0310806</lat> 
    <location>Mettupalayam Bus Stand, Mettupalayam Road, Tatabad, Coimbatore, Tamil Nadu, India</location> 
    <long type="float">76.9525282</long> 
    <updated-at type="integer">1435141085</updated-at> 
    <user-id type="integer">3566216</user-id> 
    </Location> 
    <Location> 
    <_id>558b8d97535c129bd3000e04</_id> 
    <_parent_id>test-api</_parent_id> 
    <created-at type="integer">1435209111</created-at> 
    <lat nil="true"/> 
    <location>Hyderabad, Telangana, India</location> 
    <long nil="true"/> 
    <updated-at type="integer">1435209111</updated-at> 
    <user-id type="integer">3566216</user-id> 
    </Location> 
    <Location> 
    <_id>558b8d81535c12aadd046730</_id> 
    <_parent_id>test-api</_parent_id> 
    <created-at type="integer">1435209089</created-at> 
    <lat type="float">13.1067448</lat> 
    <location>Avadi, Tamil Nadu, India</location> 
    <long type="float">80.0969511</long> 
    <updated-at type="integer">1435209089</updated-at> 
    <user-id type="integer">3566216</user-id> 
    </Location> 
    <Location> 
    <_id>558b86ad535c123883005741</_id> 
    <_parent_id>test-api</_parent_id> 
    <created-at type="integer">1435207341</created-at> 
    <lat type="float">10.3673123</lat> 
    <location>Dindigul, Tamil Nadu, India</location> 
    <long type="float">77.9802906</long> 
    <updated-at type="integer">1435207341</updated-at> 
    <user-id type="integer">3566216</user-id> 
    </Location> 
    <Location> 
    <_id>558b8f72535c126322011368</_id> 
    <_parent_id>test-api</_parent_id> 
    <created-at type="integer">1435209586</created-at> 
    <lat type="float">12.977357</lat> 
    <location>Bangalore City Junction, Gubbi Thotadappa Road, Majestic, Bengaluru, Karnataka, India</location> 
    <long type="float">77.57077</long> 
    <updated-at type="integer">1435209586</updated-at> 
    <user-id type="integer">3566216</user-id> 
    </Location> 
</data> 

Вот снимок изображения

enter image description here

Как я могу получить _id, created_at поля от ответа?

Я попытался, как это функция успеха

success: function(xml) { 
    console.log(xml); 
    $(xml).filter('data').find('Location').each(function() 
    { 
     var id = $(this).find('_id').text(); 
     var parentId = $(this).find('_parent_id').text(); 
     var createdAt = new Date($(this).find('created-at').text()); 
     var lat = parseFloat($(this).find('lat').text()); 
    });    
} 

Но я ничего не получаю. Как я могу это сделать ?

+0

Прочтите [это] (http://stackoverflow.com/questions/7228141/how-to-parse-xml-using-jquery) и [это] (https://api.jquery.com/jQuery.parseXML/) – machineaddict

+0

Спасибо .. Но я не хранил xml в качестве файла :( –

+0

Javascript не могу получить файлы доступа, так что xml НЕ является файлом – machineaddict

ответ

0

Попробуйте это:

success: function(xml) { 
    console.log(xml); 
    var xmlDoc = $.parseXML(xml); 
    $(xmlDoc).find("Location").each(function(idx, value) { 
     var id = $(value).find("_id").text(); 
     var parentId = $(value).find('_parent_id').text(); 
     var createdAt = new Date(parseInt($(value).find('created-at').text())); 
     var lat = parseFloat($(value).find('lat').text()); 
    }); 
} 
+0

Это даже не входит в цикл .......... –

+0

У меня есть ' # document' наверху. Это вопрос? –

+0

С # документом в корне, ваш XML выглядит недействительным. Вы можете проверить допустимый XML на http://www.xmlvalidation.com/ . ParseXML() должен был вызвать ошибку «Недопустимый XML» для вас. –

0

Лучше использовать JSON с веб

так заменить

url: 'https://api.quickblox.com/data/Location' 

с

url: 'https://api.quickblox.com/data/Location.json' 

JSON можно получить без проблем

Смежные вопросы