2

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>

探している出力: (nodeset)

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

1 に答える 1

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)
}
于 2012-11-30T11:12:21.007 に答える