我正在使用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