2013-03-31 49 views
2

我解析從Google通訊錄API返回的XML,在Nokogiri中使用XPath。如何對Nokogiri NodeSet進行排序?

def getcontact 
    doc = Nokogiri::XML.parse(open(url)) 
    doc.xpath('//xmlns:feed/xmlns:entry[xmlns:title[node()]]') 
end 

我的控制器:

def index 
    @mycontacts = getcontact.to_a.paginate(:page => params[:page], :per_page => 30) 
end 

我的看法是:

<% @mycontacts.each do |c| %> 
    <p> Name: <%= c.xpath('xmlns:title').text %> Email: <%= c.xpath('gd:email/@address').text %></p> 
<% end %> 

<%= will_paginate @mycontacts %> 

我想按標題的字母順序進行排序,我想知道如何去了解這一點。我已經讀過,我可以使用sort_by,但是如何從數組中選擇標題?

回答

3

下應該工作

@mycontacts.sort!{|a, b| a.xpath('xmlns:title').text <=> b.xpath('xmlns:title').text} 

塊告訴它做的基礎上,.xpath比較(「的xmlns:標題」)文本爲每個對象。

+0

非常感謝,你介意解釋這是如何工作,請讓我可以再次使用也許在不同的場景 – Richlewis

+0

<=>在做什麼?是比較? – Richlewis

+0

您傳遞的是一個塊,其中a,b是數組中的任意兩個對象,而<=>是您希望將數組中的任何兩個對象進行比較的方式,所以是的,這是比較。因此,例如讓我說我已經得到了一組對象,我希望按照他們的「收入」減去他們的「成本」來分類,我會做@ objects.sort!{| a,b | (a.revenue - a.cost)<=>(b.revenue - b.cost)}這將返回一個按利潤排序的數組。 – rovermicrover