C#模板引擎

我正在寻找一个独立的,易于使用的C#代码,模板引擎。 我想要做的是创build一个带有数据占位符的html和xml文件,并用我的代码中的数据填充它们。 引擎需要支持循环(复制部分模板forms多于一个对象)和条件(只有在某些条件为真的情况下才将模板的部分添加到最终的html / xml中)。 有人可以为我推荐一个好的select,并添加一个或多或less的这样的代码示例的链接,以及一些关于如何使用推荐的组件的文档来满足我的需求?

谢谢:)

只是想添加一件事 – 我也需要使用循环来复制表行,甚至整个表(在html版本)和复杂的元素(在xml版本)再次感谢:)

我已经使用了StringTemplate ,效果很好。 一些资源:

  • 五分钟的介绍
  • CodeProject上的文章显示了使用C#

T4, 文本模板转换工具包呢? 它应该符合您的要求,并且是在Visual Studio中内置的。

很棒的T4资源:

奥列格Sych的博客

T4编辑器

T4工具箱

有一篇不错的文章如何使用RazorView引擎: 如何使用RazorEngine 创build可本地化的文本模板引擎

SmartFormat是一个非常简单的库,可以满足您的所有需求。 它专注于构build“自然语言”文本,非常适合从列表生成数据或应用条件逻辑。

该语法与String.Format非常相似,非常简单,易于学习和使用。 以下是文档中的语法示例:

 Smart.Format("{Name}'s friends: {Friends:{Name}|, |, and}", user) // Result: "Scott's friends: Michael, Jim, Pam, and Dwight" 

该库是开源的,可以轻松扩展,所以你也可以使用附加function来增强它。

你看过XSLT吗? 你将不得不从xml开始你的源数据格式,也许通过xml序列化你的数据对象。 你可以做循环 , 如果语句轻松!

Kathleen Dollard有一本关于通过XSLT生成代码的书 。

就个人而言,我是T4的粉丝(特别是在生成C#时),但是您可能会发现由于XML和HTML是您的输出types,所以您已经介绍了XSLT。 另外它是非常跨平台的。

我有一个模板引擎内置到我的类库,看起来和类似于旧式的ASP,或T4的东西。

您基本上在<%%>块中编写C#代码,因此可以执行C#可以执行的大部分操作,但限制了整个模板文件正在编译为单个方法。 换句话说,你不能在模板中定义助手类等,但是对于助手方法你可以使用匿名方法。

例:

 <% var firstname = "Bob"; var count = 10; for (Int32 index = 0; index < count; index++) { %> <%= firstname %> x <%= index+1 %>/<%= count %> <% } %> 

这将被编译为另一个appdomain中的C#类,并且可以执行以返回包含生成文本的string。

您也可以将parameter passing到模板中,也可以引用类库,这意味着您可以传递自定义数据结构或从模板访问数据访问层或业务逻辑代码。

如果你想看看它,代码在我的Subversion库或者网页中的类库中是可用的:

  • Subversion版本库的源代码
  • 二进制文件的Subversion版本库 ,包含最新的源代码构build和通过unit testing)

对于Subversion版本库,你需要一个用户名和密码,都是“guest”,没有引号。

代码在LVK.Text.Templating项目/程序集中。

另外,让我知道(见个人资料页上的电子邮件,或留下评论),我会给你更多的例子。

您可能需要此.NET模板引擎 。

模板代码:

 $Book.StaticId$ ID: $bk.BookId$ - Author: $bk.Author.Name$ Length of the author's Name: $bk.Author.Name.Length$ 

C#代码:

 class Author { public string Name { get { return "John Borders"; } } } class Book { public static string StaticId { get { return "AABB"; } } public int BookId { get { return 100; } } public Author Author { get { return new Author(); } } } public class PropertySample1 { [STAThread] static void Main() { TemplateEngine dt = new TemplateEngine(); dt.LoadFromFile("Template.tpl"); Book book = new Book(); dt.SetValue("bk", book); dt.UsingNamespace("CSharp,Demo"); string output = dt.Run(); Console.WriteLine(output); } } 

输出是:

 AABB ID: 100 - Author: John Borders 12