zl程序教程

您现在的位置是:首页 >  其他

当前栏目

一款完全国产的基于C#语言开发的跨平台的文本解析引擎(模板引擎)

2023-03-07 09:08:56 时间
大家好,我是宝弟!

今天给大家分享一款完全国产的基于C#语言开发的跨平台的文本解析引擎(模板引擎)JNTemplate,它能生成任何基于文本的内容,包括且不限于html,xml,css等,让前端展示与后端代码逻辑分离。同时,它也提供了一个在WebForm与Razor之外的选择!

JNTemplate所有代码全部开源,且具有最小的依赖关系,能轻松实现迁移与跨平台。同时,在满足我们开源协议的前提下,大家可以自由使用,分发,和用于商业目的

从2.0版本开始,引擎全面升级为编译型模板引擎,在性能上得到了更大的提升。

特点

  • 更快速:高效的IL模板预编译机制,让运行速度接近原生体验。
  • 更简单:语法简单易学,有一定前后端基础,最快可以10分钟上手
  • 更方便:能自由配置各项参数,扩展自己的标签。
  • 更自由:支持商用无须任何费用,所有代码完全开源。

安装

PM> Install-Package JinianNet.JNTemplate

或者

> dotnet add package JinianNet.JNTemplat

通过源码进行构建

1

Windows

> git clone https://gitee.com/jiniannet/jntemplate.git
> build/build.bat

1

Linux

> git clone https://gitee.com/jiniannet/jntemplate.git
> cd build
> ./build.sh

快速开始

  1. 可以通过 Engine.LoadTemplate(...)快速从一个文件来创建一个模板,也可以通过 Engine.CreateTemplate(...)从指定模板内容创建模板。
  2. 通过ITemplate.Set(...) 可以为模板赋值
  3. 调用 ITemplate.Rebder(...) 获取呈现结果

1

示例

模板文件default.html

<!DOCTYPE html>
<html>
<body>
  <h1>Hello, ${name}</h1>
</body>
</html>

后台代码

var template = Engine.LoadTemplate(@"c:\wwwroot\view\index.html");
template.Set("name", "jntemplate");
var result = template.Render();

或者

var template = Engine.CreateTemplate("<p>你好,$name</p>");
template.Set("name","jntemplate");
var result = template.Render();

输出

<!DOCTYPE html>
<html>
<body>
  <h1>Hello, jntemplate</h1>
</body>
</html>

我们可以通过扩展方法template.Render()直接获取生成的文本内容,也可以通过template.Render(TextWriter:writer)直接写入输出流,如:

在控制台程序中

var template = Engine.CreateTemplate("<p>你好,$name</p>");
template.Set("name","jntemplate");
template.Render(Console.Out);

在WebForm中

var template = Engine.CreateTemplate("<p>你好,$name</p>");
template.Set("name","jntemplate");
template.Render(Response.Output);

使用foreach快速迭代一个列表

模板文件:view.html

<ul>
${foreach(name in list)}
  <li>${name}</li>
${end}
</ul>

c# 代码

var template = Engine.LoadTemplate(@"c:\wwwroot\view\view.html"); ;
template.Set("list", new string[] { "github","jntemplate" });
var result = template.Render();

输出结果:

<ul>
  <li>github</li>
  <li>jntemplate</li>
</ul>

标签说明

在Jntemplate, 标签特指用来包含模板代码的语法块,它是基本的呈现单元,在模板解析完成后,该语法块将会被替换成具体的数据或者内容。

标签根据写法可分为完整标签与简写标签二种(标签前后缀是可以进行配置修改的,本处仅以默认配置为例):

  • 完整标签:使用{作为标签开头并以}结尾,如:{tagName}
  • 简写标签:以开头,以空白字符结尾,如:tagName

在通常情况下,绝大部分标签都可以使用简写标签,简写标签看起来会更加简洁。但是在以下情况下,标签不能简写:

  1. 算术表达式与逻辑表达式必须使用完整标签,比如 {3+5} 不能简写为3 + 5
  2. 标签结尾处是英文句号,英文或者数字时必须使用完整标签。如{siteHost}.com 不能简写为 siteHost.com
  3. 标签之间存在空白字符或者其它必须使用完整标签的字符。

按类型可以分为基本标签与复合标签。

  • 基础标签:所有代码都包含在标签起始符${ 与 结束符} 之间,基本标签又分为普通基本标签、特殊标签与子标签三种。
    • 普通标签:普通基本标签
    • 特殊标签:一般具有特殊意义,等同于编程语言中的系统关键字。
    • 子标签:具备父标签的标签,其父标签通常为另外一个基本标签。
  • 复合标签:由一个或者多个基本标签组合而成。

标签的关系

.
└── 标签
    ├── 复合标签
    └── 基本标签
        ├── 普通标签
        ├── 特殊标签
        └── 子标签

资源获取方式

https://gitee.com/jiniannet/jntemplate