替换XML标记的内容

时间:2015-05-20 13:53:20

标签: ruby xml

实际上我正在研究一种简化修订的工具。

所以我有一个给定的XML文件,其版本字段如下:

<productnumber>MyNumber</productnumber>. 

我的工具要求提供修订号,并将修订版添加到Revision_History.xml中。现在它应该使用给定的修订号在其他XML文件中替换它。

这项工作的最佳方式是什么?在我使用该工具的那个时候,我不知道究竟什么是“MyNumber”。

解析XML并使用gsub进行更改是一种好方法吗?

我现在试过了:

def self.update_productnumber(revnumber, edition, language)
    if File.exist?("#{language}/Article_Info.xml")
      info = "#{language}/Article_Info.xml"
    else
      info = "#{language}/Book_Info.xml"
    end
    f = File.open("#{info}", 'w')
    xml = Nokogiri::XML(f)
    query = Nokogiri::XML::Node.new 'productnumber', xml
    query['productnumber'] = "#{revnumber}"
    query.parent = xml.root
    f.write(xml)
    f.close
  end

那个给了我一个空的XML文件和警告:

/home/smanns/.rvm/gems/ruby-2.2.1/gems/nokogiri-1.6.6.2/lib/nokogiri/xml/document.rb:267:in `eof?': not opened for reading (IOError)
    from /home/smanns/.rvm/gems/ruby-2.2.1/gems/nokogiri-1.6.6.2/lib/nokogiri/xml/document.rb:267:in `empty_doc?'
    from /home/smanns/.rvm/gems/ruby-2.2.1/gems/nokogiri-1.6.6.2/lib/nokogiri/xml/document.rb:48:in `parse'
    from /home/smanns/.rvm/gems/ruby-2.2.1/gems/nokogiri-1.6.6.2/lib/nokogiri/xml.rb:34:in `XML'

我现在找到了一个解决方案:

def self.replace_productnumber(revision, edition, language)
    puts 'Replacing the productnumber'.color(:yellow)
    if File.exist?("#{language}/Article_Info.xml")
      info = "#{language}/Article_Info.xml"
    else
      info = "#{language}/Book_Info.xml"
    end
    doc = Nokogiri::XML(IO.read(info))
    doc.search('productnumber').each do |node|
      node.content = "#{revision}"
    end
    doc.search('edition').each do |node|
      node.content = "#{edition}"
    end
    IO.write(info, doc.to_xml)
  end

感谢所有帮助者。

0 个答案:

没有答案