2014-01-17 162 views
1

背景模板語言,以及如何限制剃刀模板

我有一個返回實體領域的動態列表對象的網絡服務訪問命名空間。目前Web服務可以返回實體,但是我想讓它更簡單,並允許客戶端提供一個模板字符串,我使用該實體解析並返回結果。

下面是一個例子:

var entity = new Entity(); 
entity.Fields.Add("status", "worked"); 
var template = "My template parser {{status}}!"; 
var result = service.ParseTemplate(template, entity); 
// Expected result is "My template parser worked!" 

這一點我能做到使用一個簡單的正則表達式。然後我決定我需要一些基本的邏輯,比如for循環和if語句。我決定使用Cottle,這是一個很好的開源模板引擎。不幸的是,隨着我的實體變得越來越複雜,這不會削減它。這裏是我想要做的事情的那種:

var entity = new Entity(); 
entity.Fields.Add("name", "Bob"); 

var entity2 = new Entity(); 
entity2.Fields.Add("status", "worked"); 
entity2.Fields.Add("person", entity); 

var template = "My name is {{person.name}}. My template parser {{status}}!"; 
var result = service.ParseTemplate(template, entity2); 
// Expected result is "My name is Bob. My template parser worked!" 

正如你所看到的,第二個例子允許基於點語法找到實體連接並讀取其領域也是如此。

現在到了問題的肉...

我決定,剃鬚刀能夠做到什麼,我期待使用RazorEngine項目。然而,我很猶豫邀請人們向我發送一個充滿服務器端代碼的模板,原因很明顯。有沒有一種方法可以解析模板,同時刪除對整個.Net庫的訪問?

替代問題

是否有更好的模板解決方案,在那裏,任何人都可以推薦嗎?

回答

0

最後,我最終使用了XSLT,因爲它比以前的方法更健壯,更安全,並且構建一個XML文檔進行解析要簡單得多,也更靈活。