我想按标题值对Nokigiri节点集进行排序。尝试了以下代码,但排序不起作用:/有什么建议吗?
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>
如果我理解您的请求,您想删除它们,然后对数组进行排序,然后将它们添加回来:
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)
}