用Scriban进行模版解析

前言

有些时候,我们需要根据模版去展示一些内容,通常会借助模版引擎来处理。

举个简单的例子,发短信。

短信肯定是有模版的,不同的场景对应不同的模版。

注册的,

【xxx】恭喜您成功注册yyy平台,您的帐号是zzz

支付的,

【xxx】您已成功支付,订单号为yyy,支付金额为zzz

还有很多其他。。。

如果存到数据库中,那么模版可能就会是

【{0}】您已成功支付,订单号为{1},支付金额为{2}

为的就是在代码中去格式化这个。

var tpl = "【{0}】您已成功支付,订单号为{1},支付金额为{2}";
var str = string.Format(tpl, "短信", "Order_123456", "200");

下面来看看用Scriban来处理。

Scriban

Scriban是一种快速,强大,安全和轻量级文本模板化语言和引擎。作者是Unity-Technologies的Alexandre Mutel

它支持两种模版,一种是自己的scriban模版,一种是liquid模版。

语法都差不多,不过最基本的文本替换应该能满足80%的需求了。

下面来看个例子就差不多了。

using Scriban;
using System;
using System.Collections.Generic;

class ScribanDemo
{
    public void RenderSimpleText()
    {
        string text = "Hello, {{name}} ";
        
        // 先解析
        var tpl = Template.Parse(text);
        
        // 后渲染
        var res1 = tpl.Render(new { name = "catcher wong" });
        Console.WriteLine(res1);
        var res2 = tpl.Render(new { Name = "Catcher Wong" });
        Console.WriteLine(res2);
    }

    public void RenderObject()
    {
        string text = @"Hello {{model.name}}, your orders' information are as follow, 

        you have {{model.orders | array.size }} orders                

        {{ for order in model.orders }}
            {{order.id}}-{{order.amount}}
        {{ end }}
        ";

        var tpl = Template.Parse(text);

        var res1 = tpl.Render(new 
        { 
            model = new ObjModel 
            { 
                Name = "Catcher Wong", 
                Orders = new List<ObjModel.Order> 
                { 
                    new ObjModel.Order { Id = 1, Amount = 100 }, 
                    new ObjModel.Order { Id = 2, Amount = 300 } 
                } 
            } 
        });

        Console.WriteLine(res1);
    }       
}

结果大概如下

Hello, catcher wong
Hello, Catcher Wong
Hello Catcher Wong, your orders' information are as follow,

            you have 2 orders
                1-100
                2-300

总结

再来看看下面两个模版

【{0}】您已成功支付,订单号为{1},支付金额为{2}

【{{name}}】您已成功支付,订单号为{{orderno}},支付金额为{{amount}}

可能会发现,第二个明显比第一个清晰易懂。

第一个如果把几个数字的顺序搞错了,那个输出的结果可能就牛头不对马嘴了。

除了Scriban,还有Fluid也是挺不错的,不过就使用感觉上,个人还是偏向Scriban。

posted @ 2019-12-02 14:23  Catcher8  阅读(3216)  评论(0编辑  收藏  举报