2011-07-27 73 views
-1

我有一個需求,我需要編輯的一部分xml文件並保存它,但在我的代碼中的一部分xml文件它不保存。我想修改<mtn:ttl>4</mtn:ttl><mtn:ttl>9</mtn:ttl>,這部分在下面的代碼中得到了修改,但是當寫入/保存文件的一部分被破壞或者文件的格式被破壞時,任何人都可以告訴我如何解決這個問題嗎?原始的XML文件大小爲79KB,但編輯後並保存其成爲78KB ...我的文件越來越短,我不知道爲什麼

require "rexml/text" 
require "rexml/document" 
include REXML 
File.open("c://conf//cad-mtn-config.xml") do |config_file| 
    # Open the document and edit the file 
    config = Document.new(config_file) 
    if testField.to_s.match(/<mtn:ttl>/) 
    config.root.elements[4].elements[11].elements[1].elements[1].elements[1].elements[8].text="9" 
    # Write the result to a new file. 
    formatter = REXML::Formatters::Default.new 
    File.open("c://mtn-3//mtn-2.2//conf//cad-mtn-config.xml", 'w') do |result| 
     formatter.write(config, result) 
    end 
    end 
end 
+1

REXML從您的xml文件中剝離不必要的空格,使其更小。 – Yossi

+0

如果不知道文件正在發生什麼變化,很難給出正確的答案。而不是比較尺寸,你可以比較內容?也許與[FC](https://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/fc.mspx?mfr=true)命令,因爲它看起來像你在Windows上?如果'FC/w'('compress white space')選項顯示沒有差異,那麼@ yossi的評論就是解釋。 –

回答

1

它看起來像你想使用正則表達式,爲什麼不使用REXML?唯一的要求是您需要知道名稱空間在線的位置。請注意,如果它不是mtn:ttl,只是你不需要命名空間。

require 'rexml/document' 

file_path="path to file" 
contents=File.new(file_path).read 

xml_doc=REXML::Document.new(contents) 
xml_doc.add_namespace('mtn',"http://url to mtn namespace") 
xml_doc.root.elements.each('mtn:ttl') do |element| 
    element.text="9" 
end 

File.open(file_path,"w") do |data| 
    data<<xml_doc 
end 
+0

即使使用上面的代碼,文件的大小也變爲78kb,但它本身應該保持爲79kb ....請儘快幫助我...我需要修改該文件並將其保存,以便文件的其他內容不會已更改 – wani

+0

爲什麼文件大小很重要?您可以刪除一個新的行字符並以一個較小的文件結束。 –

相關問題