2011-09-30 39 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

这看起来更简单,更容易..我也会试试这个 –