我正在使用nokogiri和ruby来编写一些部署脚本,我需要从许多信息来源更新文件。通过我只是做了一个简单的第一个文件我循环替换GSUB在Ruby中的字符串中的两个索引之间进行替换的正确方法是什么?
File.open(@sql_file, 'w') { |file| file.puts text.gsub(/#{find}/, replace.to_s) }
,对于第一个文件的伟大工程,但第二次我需要分析出该文本我最初更换和潜在的更新。使用Nokogiri我已经拿出以下内容:
def write_changes(find, replace)
text = ''
text = File.read(@sql_file)
if text =~ /#{find}/
File.open(@sql_file, 'w') do |file|
file.puts text.gsub(/#{find}/, replace.to_s)
end
else
xml = Nokogiri::XML.parse(replace)
element xml.at_xpath('//items')
end
end
也许不是很红宝石:ish,但它的工作原理。虽然这里的问题是,我需要从文件中的文本解析出
<items id="">
<item />
</items>
,这样我可以用引入nokogiri更新文本和后来与我的变化更换。
所以基本上我想我需要找到id匹配的物品标签的起始索引,然后删除从<items id="">
到</items>
的所有内容。
它有道理吗?我应该进一步澄清吗?
编辑1.我有一些工作,但我无法弄清楚最后一部分。
original = text[begin_index, end_index]
xml2 = Nokogiri::XML.parse(original)
update_element_values(xml, xml2)
add_missing_elements(xml, xml2)
# text[begin_index, end_index] = xml2.root.to_s
text.insert(begin_index, xml2.root.to_s)
File.open(@sql_file, 'w') { |file| file.puts text }
如果我取消注释行,做了索引我与大部分缺少一些腐败斩结果之间更换。
如果我使用插入版本,我会为我尝试合并的每个文件获取重复项。在Ruby中的字符串中的两个索引之间进行替换的正确方法是什么?
你不需要'/#{}找到/' - 你可以做'text.include(查找)'和'text.gsub(发现,replace.to_s)' – 2011-04-12 23:30:28
你必须编辑在它到达nokogiri之前的文本,或者你可以解析文本,然后使用nokogiri来查找/替换适当的? – YenTheFirst 2011-04-13 00:20:40
@Andrew,欢呼的伙伴总是想方设法改进我的代码! @YenTheFirst,我只编辑文本的部分,当它到达Nokogiri,所以我想我可以使用Nokogiri。不知道如何 – mhenrixon 2011-04-13 05:10:58