实际上我正在研究一种简化修订的工具。
所以我有一个给定的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
感谢所有帮助者。