2011-09-30 95 views
0

我有一個XML文件,我需要更換一個新的字符串 兩個標記之間的文本標籤是「<的ConnectionString>古文</ConnectionString的>」紅寶石XML更換

我需要改變這到「< ConnectionString>我的新文本</ConnectionString>」

我似乎無法在網上找到任何東西,並看到使用正則表達式是一個壞主意?

請注意,此文件包含多於1周0​​<的ConnectionString>古文</ConnectionString的> 線!

有人可以指出我的方向或示例嗎? Andrew

回答

2

Nokogiri非常適合這樣的事情。見Nokogiri::Node#content=方法

#!/usr/bin/env ruby 

require 'nokogiri' 

doc = Nokogiri.XML(DATA)    # create a new nokogiri object, this could be a string or IO type (anything which responds to #read) 
element = doc.at('ConnectionString') # fetch our element 
element.content = "MY NEW TEXT"  # change the content 
puts doC#=> <?xml version="1.0"?>\n<ConnectionString>MY NEW TEXT</ConnectionString> 


__END__ 
<ConnectionString>THE OLD TEXT</ConnectionString> 
+0

好吧,這讓我關閉,但是(對不起,如果我是愚蠢的)如何將我的XML文檔傳遞到Nokogiri?我可以用文件名替換DATA嗎? –

+0

不,將其替換爲響應'read'方法或字符串的內容。 'Nokogiri.XML(File.new('foo.xml'))''和'Nokogiri.XML(File.read('foo.xml'))''都會工作:)(當然,它只是通過文件名會將其解釋爲xml字符串,或者失敗) –

+0

太棒了!我現在開始明白..非常感謝:) –

0

使用nokogiri處理XML文件。有關特定任務,請參閱this

+0

我確實看到了關於使用引入nokogiri但不能從後看,還是黯然您的帖子後我的工作方式到這一點,我想要什麼? –

0

我一般同意XML,但在這種情況下,我認爲這是矯枉過正使用過引入nokogiri正則表達式。

xml = open(xmlfile).read.gsub /<ConnectionString>THE OLD TEXT<\/ConnectionString>/, '<ConnectionString>MY NEW TEXT</ConnectionString>' 
+0

這看起來更簡單,更容易..我也會試試這個 –