我正在寻找一个独立的,易于使用的C#代码模板引擎。我想用占位符创建HTML和XML文件,并用我代码中的数据填充它们。
引擎需要支持循环(将模板的一部分复制成一个对象以上)和条件(仅当某些条件为真时,才将模板的部分添加到最终的HTML / XML中)。有人可以为我推荐一个不错的选择,并添加一个或多或少的此类代码示例的链接,以及有关如何使用推荐组件满足我的需要的一些文档吗?
我还需要使用循环来复制表行,甚至复制整个表(在HTML版本中)和复杂元素(在XML版本中)。
我正在寻找一个独立的,易于使用的C#代码模板引擎。我想用占位符创建HTML和XML文件,并用我代码中的数据填充它们。
引擎需要支持循环(将模板的一部分复制成一个对象以上)和条件(仅当某些条件为真时,才将模板的部分添加到最终的HTML / XML中)。有人可以为我推荐一个不错的选择,并添加一个或多或少的此类代码示例的链接,以及有关如何使用推荐组件满足我的需要的一些文档吗?
我还需要使用循环来复制表行,甚至复制整个表(在HTML版本中)和复杂元素(在XML版本中)。
Install-Package Tor
Answers:
有一篇不错的文章,介绍如何使用RazorView引擎:如何使用RazorEngine 创建可本地化的文本模板引擎
SmartFormat是一个非常简单的库,可以满足您的所有要求。它专注于编写“自然语言”文本,非常适合从列表生成数据或应用条件逻辑。
语法与极其相似String.Format
,并且非常简单易学和易于使用。这是文档中语法的示例:
Smart.Format("{Name}'s friends: {Friends:{Name}|, |, and}", user)
// Result: "Scott's friends: Michael, Jim, Pam, and Dwight"
该库是开源的,易于扩展,因此您还可以通过附加功能对其进行增强。
我的类库中内置了一个模板引擎,其外观和工作方式与老式ASP或T4类似。
您基本上是在<%%>块中编写C#代码,因此可以执行C#可以执行的大多数操作,但要限制整个模板文件都被编译为单个方法。换句话说,您无法在模板中定义辅助类,但是对于辅助方法,您可以使用匿名方法。
例:
<%
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.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