C # 模板引擎

我正在寻找一个独立的,易于使用的 C # 代码,模板引擎。 我想创建一个带有数据占位符的 HTML 和 XML 文件, 然后用我代码里的数据填满它们。

引擎需要支持循环(在一个对象之上复制模板的多个部分)和条件(只有当某些条件为真时,才将模板的部分添加到最终的 HTML/XML 中)。 有没有人能为我推荐一个好的选择,并添加一个链接或多或少这样的代码样本,以及一些文档说明如何使用推荐的组件来满足我的需要?

我还需要使用循环来复制表行,甚至整个表(在 HTML 版本中)和复杂元素(在 XML 版本中)。

73728 次浏览

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

伟大的 T4资源:

Oleg Sych 的博客

T4编辑器

T4工具箱

你看过 XSLT吗?您必须首先使用 XML 格式的源数据格式,也许可以通过对数据对象进行 xmlSeries 化。你可以轻松地做 循环如果陈述

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

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

我在类库中内置了一个模板引擎,它的外观和工作方式类似于旧式的 ASP 或 T4。

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

例如:

<%
var firstname = "Bob";
var count = 10;


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

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

您还可以向模板传递参数,还可以传递引用类库,这意味着您可以传递自定义数据结构,或者从模板访问数据访问层或业务逻辑代码。

如果你想看看它,代码可以从我的 Subversion 存储库或网页的类库中找到:

对于 subversion 存储库,您需要一个用户名和密码,它们都是“ guest”,没有引号。

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

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

你可能需要这个 .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

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

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

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

该库是开源的,并且易于扩展,因此您还可以使用其他特性来增强它。

有一篇很好的文章教你如何使用 RazorView 引擎: 如何使用 RazorEngine 创建一个可本地化的文本模板引擎