我想制作一个快速的Ruby程序,它允许我读取一个XML文件并对一组特定的子项进行排序,然后将其写回磁盘上。例如:
我想从我编写的XML文件中进行排序:
<Nodes>
<Node1>
<Name>Fruits</Name>
<Properties>
<Property>
<Name>Orange<Name>
</Property>
<Property>
<Name>Vinegar<Name>
</Property>
<Property>
<Name>Apple<Name>
</Property>
</Properties>
</Node1>
<Node2>
<Name>Furniture</Name>
<Properties>
<Property>
<Name>Table</Name>
</Property>
<Property>
<Name>Desk</Name>
</Property>
<Property>
<Name>Bed</Name>
</Property>
</Properties>
</Node2>
</Nodes>
我想按字母顺序对节点属性的子节目进行排序,例如:
<Property>
<Name>Apple<Name>
</Property>
<Property>
<Name>Orange<Name>
</Property>
<Property>
<Name>Vinegar<Name>
</Property>
有没有办法可以用Ruby快速完成这项工作?
答案 0 :(得分:1)
正如您已经从选择的标签中了解到的那样,您选择的工具将是Nokogiri。我在解析你的XML时遇到了一些问题,所以我把它改写成如下:
# sortnodes.xml
<nodes>
<node1>
<name>Fruits</name>
<properties>
<property>
<name>Orange</name>
</property>
<property>
<name>Vinegar</name>
</property>
<property>
<name>Apple</name>
</property>
</properties>
</node1>
<node2>
<name>Furniture</name>
<properties>
<property>
<name>Table</name>
</property>
<property>
<name>Desk</name>
</property>
<property>
<name>Bed</name>
</property>
</properties>
</node2>
</nodes>
相应的代码是:
require 'nokogiri'
f = File.open("sortnodes.xml")
doc = Nokogiri::XML(f)
f.close
doc.xpath('/nodes//properties').each do |properties|
sorted = properties.children.sort_by { |n| n.text }
sorted.each { |n| properties << n }
end