一款完全国产的基于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
快速开始
- 可以通过
Engine.LoadTemplate(...)
快速从一个文件来创建一个模板,也可以通过Engine.CreateTemplate(...)
从指定模板内容创建模板。 - 通过
ITemplate.Set(...)
可以为模板赋值 - 调用
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
在通常情况下,绝大部分标签都可以使用简写标签,简写标签看起来会更加简洁。但是在以下情况下,标签不能简写:
- 算术表达式与逻辑表达式必须使用完整标签,比如 {3+5} 不能简写为3 + 5
- 标签结尾处是英文句号,英文或者数字时必须使用完整标签。如{siteHost}.com 不能简写为 siteHost.com
- 标签之间存在空白字符或者其它必须使用完整标签的字符。
按类型可以分为基本标签与复合标签。
- 基础标签:所有代码都包含在标签起始符
${
与 结束符}
之间,基本标签又分为普通基本标签、特殊标签与子标签三种。- 普通标签:普通基本标签
- 特殊标签:一般具有特殊意义,等同于编程语言中的系统关键字。
- 子标签:具备父标签的标签,其父标签通常为另外一个基本标签。
- 复合标签:由一个或者多个基本标签组合而成。
标签的关系
.
└── 标签
├── 复合标签
└── 基本标签
├── 普通标签
├── 特殊标签
└── 子标签
资源获取方式
https://gitee.com/jiniannet/jntemplate
相关文章
- 在 Go 里用 CGO?这 7 个问题你要关注!
- 9款优秀的去中心化通讯软件 Matrix 的客户端
- 求职数据分析,项目经验该怎么写
- 在OKR中,我看到了数据驱动业务的未来
- 火山引擎云原生大数据在金融行业的实践
- OpenHarmony富设备移植指南(二)—从postmarketOS获取移植资源
- 《数据成熟度指数》报告:64%的企业领袖认为大多数员工“不懂数据”
- OpenHarmony 小型系统兼容性测试指南
- 肯睿中国(Cloudera):2023年企业数字战略三大趋势预测
- 适用于 Linux 的十大命令行游戏
- GNOME 截图工具的新旧截图方式
- System76 即将推出的 COSMIC 桌面正在酝酿大变化
- 2GB 内存 8GB 存储即可流畅运行,Windows 11 极致精简版系统 Tiny11 发布
- 迎接 ecode:一个即将推出的具有全新图形用户界面框架的现代、轻量级代码编辑器
- loongarch架构介绍(三)—地址翻译
- Go 语言怎么解决编译器错误“err is shadowed during return”?
- 敏捷:可能被开发人员遗忘的部分
- Denodo预测2023年数据管理和分析的未来
- 利用数据推动可持续发展
- 在 Vue3 中实现 React 原生 Hooks(useState、useEffect),深入理解 React Hooks 的