zoukankan      html  css  js  c++  java
  • 用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。

  • 相关阅读:
    WebApi接口访问频率控制的实现
    一分钟告诉你究竟DevOps是什么鬼?
    大多数企业不知道的隐形成本
    29个网络营销必须知道的数据
    如何让自己的生活有品质感?
    一则有意思的产品小故事
    免费学习编程的9个地方
    营销,就是营销人性的弱点!
    网络营销行业十大看了就想吐的“滥词”
    高质量的内容是SEO的关键
  • 原文地址:https://www.cnblogs.com/catcher1994/p/11970395.html
Copyright © 2011-2022 走看看