今天给大家分享一款完全国产的基于C#语言开发的跨平台的文本解析引擎(模板引擎)JNTemplate,它能生成任何基于文本的内容,包括且不限于html,xml,css等,让前端展示与后端代码逻辑分离。同时,它也提供了一个在WebForm与Razor之外的选择!
JNTemplate所有代码全部开源,且具有最小的依赖关系,能轻松实现迁移与跨平台。同时,在满足我们开源协议的前提下,大家可以自由使用,分发,和用于商业目的
从2.0版本开始,引擎全面升级为编译型模板引擎,在性能上得到了更大的提升。
特点
- 更快速:高效的IL模板预编译机制,让运行速度接近原生体验。
- 更简单:语法简单易学,有一定前后端基础,最快可以10分钟上手
- 更方便:能自由配置各项参数,扩展自己的标签。
- 更自由:支持商用无须任何费用,所有代码完全开源。
安装
代码语言:javascript复制PM> Install-Package JinianNet.JNTemplate
或者
代码语言:javascript复制> dotnet add package JinianNet.JNTemplat
通过源码进行构建
1
Windows
代码语言:javascript复制> git clone https://gitee.com/jiniannet/jntemplate.git
> build/build.bat
1
Linux
代码语言:javascript复制> git clone https://gitee.com/jiniannet/jntemplate.git
> cd build
> ./build.sh
快速开始
- 可以通过
Engine.LoadTemplate(...)
快速从一个文件来创建一个模板,也可以通过Engine.CreateTemplate(...)
从指定模板内容创建模板。 - 通过
ITemplate.Set(...)
可以为模板赋值 - 调用
ITemplate.Rebder(...)
获取呈现结果
1
示例
模板文件default.html
代码语言:javascript复制<!DOCTYPE html>
<html>
<body>
<h1>Hello, ${name}</h1>
</body>
</html>
后台代码
代码语言:javascript复制var template = Engine.LoadTemplate(@"c:wwwrootviewindex.html");
template.Set("name", "jntemplate");
var result = template.Render();
或者
代码语言:javascript复制var template = Engine.CreateTemplate("<p>你好,$name</p>");
template.Set("name","jntemplate");
var result = template.Render();
输出
代码语言:javascript复制<!DOCTYPE html>
<html>
<body>
<h1>Hello, jntemplate</h1>
</body>
</html>
我们可以通过扩展方法template.Render()
直接获取生成的文本内容,也可以通过template.Render(TextWriter:writer)
直接写入输出流,如:
在控制台程序中
代码语言:javascript复制var template = Engine.CreateTemplate("<p>你好,$name</p>");
template.Set("name","jntemplate");
template.Render(Console.Out);
在WebForm中
代码语言:javascript复制var template = Engine.CreateTemplate("<p>你好,$name</p>");
template.Set("name","jntemplate");
template.Render(Response.Output);
使用foreach快速迭代一个列表
模板文件:view.html
代码语言:javascript复制<ul>
${foreach(name in list)}
<li>${name}</li>
${end}
</ul>
c# 代码
代码语言:javascript复制var template = Engine.LoadTemplate(@"c:wwwrootviewview.html"); ;
template.Set("list", new string[] { "github","jntemplate" });
var result = template.Render();
输出结果:
代码语言:javascript复制<ul>
<li>github</li>
<li>jntemplate</li>
</ul>
标签说明
在Jntemplate, 标签特指用来包含模板代码的语法块,它是基本的呈现单元,在模板解析完成后,该语法块将会被替换成具体的数据或者内容。
标签根据写法可分为完整标签与简写标签二种(标签前后缀是可以进行配置修改的,本处仅以默认配置为例):
- 完整标签:使用{作为标签开头并以}结尾,如:{tagName}
- 简写标签:以开头,以空白字符结尾,如:tagName
在通常情况下,绝大部分标签都可以使用简写标签,简写标签看起来会更加简洁。但是在以下情况下,标签不能简写:
- 算术表达式与逻辑表达式必须使用完整标签,比如 {3 5} 不能简写为3 5
- 标签结尾处是英文句号,英文或者数字时必须使用完整标签。如{siteHost}.com 不能简写为 siteHost.com
- 标签之间存在空白字符或者其它必须使用完整标签的字符。
按类型可以分为基本标签与复合标签。
- 基础标签:所有代码都包含在标签起始符
${
与 结束符}
之间,基本标签又分为普通基本标签、特殊标签与子标签三种。- 普通标签:普通基本标签
- 特殊标签:一般具有特殊意义,等同于编程语言中的系统关键字。
- 子标签:具备父标签的标签,其父标签通常为另外一个基本标签。
- 复合标签:由一个或者多个基本标签组合而成。
标签的关系
代码语言:javascript复制.
└── 标签
├── 复合标签
└── 基本标签
├── 普通标签
├── 特殊标签
└── 子标签
资源获取方式
https://gitee.com/jiniannet/jntemplate