2012-11-30 57 views
2

我想排序的标题值Nokigiri节点集。尝试了下面的代码,但排序不工作:/任何建议?红宝石,引入nokogiri:排序节点集的属性值

doc.xpath("//item").sort{|x,y| x.xpath('foo:attr[@name="title"]/@value').text <=> y.xpath('foot:attr[@name="title"]/@value').text } 

XML例如:

<item> 
    <foo:attr name="title" value="a"/> 
</item> 
<item> 
    <foot:attr name="title" value="c"/> 
</item> 
<item> 
    <foor:attr name="title" value="b"/> 
</item> 

输出我要找:(节点集)

<item> 
    <foo:attr name="title" value="a"/> 
</item> 
<item> 
    <foot:attr name="title" value="b"/> 
</item> 
<item> 
    <foor:attr name="title" value="c"/> 
</item> 
+1

我不认为这真的马kes感觉像这样排序节点。也许你可以描述你的目标。 – pguardiario

+0

这是一种在XML Feed上进行排序的解决方法。该API不支持排序,所以我必须这样做。可能吗? – atmorell

+0

你可以给你更多的信息,你期待什么o/p ..样品o/p将gr8 – Bijendra

回答

4

如果我明白你的要求,你要删除它们,然后对数组进行排序,然后回加:

xml = Nokogiri::XML.parse(data) 
nodes = xml.root.css("item").remove 
nodes.sort_by{ |node| 
    node.css("attr")[0].attr("value")) 
}.each{ |node| 
    xml.root.add_child(node) 
} 
+0

只好.to_i添加到.attr(“值”)之后 - 如果您尝试那种包含一个浮动的字符串sort_by不起作用。 – atmorell