Вот пример, вам, конечно, придется изменить это для работы с вашим XML.
Учитывая, что ваш XML выглядит примерно так:
<top>
<node1>
<value>mmm</value>
<value>zzz</value>
<value>ccc</value>
</node1>
<anothernode>
<value>zzz</value>
<value>ccc</value>
</anothernode>
</top>
И если вы хотитесделать потомки узла 1 в алфавитном порядке по значению, вы можете сделать:
n = Nokogiri::XML(the_xml_i_wrote_above)
node1 = n.xpath("//node1").first
sorted_children = node1.children.sort{|x,y| x.text <=> y.text }
node1.children.each {|x| x.unlink }
sorted_children.each {|x| node1 << x}
И тогда n.to_s должно быть равно:
<top>
<node1>
<value>ccc</value>
<value>mmm</value>
<value>zzz</value>
</node1>
<anothernode>
<value>zzz</value>
<value>ccc</value>
</anothernode>
</top>
Могут быть более эффективные способыдля этого, в частности, я искал документированный способ отсоединения всех дочерних элементов одновременно (может, node1.children = []?) или способ Nokogiri для сортировки узлов.Посмотрите на Документы Нокогири , чтобы узнать, как это сделать.