Ruby讀取XML使用REXML沒話說,方便快捷,但Ruby創建XML呢?
工作上需要使用程序根據規則自動生成一個XML數據文件,準備用Ruby實現,上網查了一些Ruby創建XML文檔的介紹,10篇有9篇都是轉載那一個文章,使用Builder::XmlMarkup操作,但文章介紹的也太簡單了,琢磨半天也沒想明白怎麼製作稍微複雜一點點的嵌套結構;
如果這個工作用Java實現,不用考慮,自然FreeMarker參上,用模板寫XML避免操作複雜的Dom,Element的,懶人的福音啊!我記得原來看過Ruby也有模板的功能,叫啥名忘了,Google吧,發現要找的就是ERB(ERb)
ERB全稱是啥沒找到,標準庫文檔中介紹 ERB provides an easy to use but powerful templating system for Ruby;看介紹Ruby On Rails就是使用ERB作爲創建文件的模板;但是,網上關於Ruby ERB也退少了(難道因爲太簡單?不用介紹??),自己收集了一些,留下備用,也給有此需求的朋友留個參考
ERB屬於Ruby標準庫中的東西,不需要單獨安裝,模板中動態腳本的寫法和JSP基本一個模子扒出來的
<%寫邏輯腳本(Ruby語法)%>
<%=直接輸出變量值或運算結果%>
給一段示例代碼,這段代碼是從Hash中讀取信息創建sql語句保存到文件中
require "erb"
domains = {...}
sqlTemplate = ERB.new %q{
<%for organization in domains.keys%>
insert into org_domain(Domain, organization) values('<%=domains[organization]%>','<%=organization%>');
<%end%>
}
sqlFile = File.new("./sql.sql", "w")
sqlFile.puts sqlTemplate.result
補充一點,關於模板輸出結果可以使用
template.result
template.result(binding)
* 兩個方法還是有細微差別的,無參數那種直接使用當前代碼段中的上下文環境,對於直接寫一些簡單測試腳本完全夠用
* 當ERB方法要運行在類內的方法,或者訪問類內變量時,必須明確調用 .result(binding) 與上下文變量綁定,否則ERB模板無法直接訪問到類變量