2016-12-02 48 views
0

我想专门从xml返回一个数据。返回一个具体的数据

如果nameOfBusiness =餐厅,那么它返回所有评级(三家餐厅)与一个具有餐厅的物品名称。

我怎样才能让它只警觉一个餐厅,而不包括其他2餐厅(与蒸汽和起源)?

这里是我的xml:

<resultitem> 
<itemname>Restaurant</itemname> 
<rating>3</rating> 
</resultitem> 
<resultitem> 
<itemname>Restaurant Origins</itemname> 
<rating>4</rating> 
</resultitem> 
<resultitem> 
<itemname>Restaurant Steams</itemname> 
<rating>4.1</rating> 
</resultitem> 

这里是我的Ajax代码:

$.ajax({ 
    type: 'GET', 
    url: 'someURL.xml', 
    dataType: 'xml', 
    success: function(xml) { 
    var found = $(xml).find('resultitem itemname:contains("' + nameOfBusiness + '")'); 
    if (!found.length) { 
     alert("Rating not published yet"); 
     return; 
    } 
    found.each(function() { 
     var rating = $(this).parent().find('rating').text(); 
     alert("The rating for " + nameOfBusiness + " is " + rating); 
    }) 
    } 
}); 
+0

,而不是'found.each'循环只是处理第一项'发现[0]' –

回答

0

对于刚刚的第一个项目,你可以使用:

const foundRating = found.first().parent().find('rating').text(); 

您也可以break退出循环false

found.each(function(i, v) { 
    if (i === 0) { 
     var rating = $(this).parent().find('rating').text(); 
     alert("The rating for " + nameOfBusiness + " is " + rating); 
     return false; 
    } 
}); 

jQuery each docs

+0

它的工作,但它会提醒的第一个结果3次... –

+0

我也想知道,我如何使用包含在上的元素?我有但我忘了把它包含在xml中。是否是类似于.... find('resultitem itemname:contains(“'+ nameOfBusiness +'”)itemaddress:contains(“'+ addressOfBusiness +'”)') –

+0

没有用于验证文本值的CSS选择器,但可以像'$('itemname')。map(function(i,v){return $(v).text()});'(这在浏览器中工作,但不在JSbin中)。 JSbin需要另外一个函数:'var text = $('itemname')。map(function(i,v){return $(v).text()}); text = $ .makeArray(text);' – amarpatel