0

我想制作一个快速的 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 快速做到这一点?

4

1 回答 1

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
于 2012-10-14T01:32:02.220 回答