• 基于HSharp使用C#对象建立并输出HTML


    在C#代码中有的时候我们需要返回视图。一般为此往往要专门建立cshtml文档。如果直接在代码中写HTML往往又容易产生语法错误。如果有一种方式能够高效的构建正确的HTML文档,并有效借助C#的强类型特性,那么在需要输出HTML的时候会大大提升效率。这对于ASP.Net和ASP.Net MVC中就可以在控制器中直接渲染生成视图。对于复杂的视图逻辑也可以转移到控制器中完成。

    找了很久,我还是找到了一个比较可行的方法。大概方法是用到了一个叫做HSharp的库。用来以一种弱类型语言的处理方式来应用在C#,处理HTML。能够反序列化和序列化HTML,也不需要建立对应的C#类。

    HSharp在Github上的主页:https://github.com/Obisoft2017/HSharp

    安装:

    PM> Install-Package Obisoft.HSharp 

    仔细观察它,发现它有

     Document.GenerateHTML()

    以及

    public static string SerializeHtml(HDoc Document)

    两个方式来序列化。开始我纳闷很久这有什么区别,在Github上翻了翻代码发现其实是一样的。

    但这两种方式都需要构建HDoc文档。还好构建不算太难。

                var Document = new HDoc(DocumentOptions.BasicHTML);
                Document["html"]["body"].AddChild("div");
                Document["html"]["body"]["div"].AddChild("a", new HProp("href", "/#"));
                Document["html"]["body"]["div"].AddChild("table");
                Document["html"]["body"]["div"]["table"].AddChildren(
                 new HTag("tr"),
                 new HTag("tr", "SomeText"),
                 new HTag("tr", new HTag("td")));
                var Result = Document.GenerateHTML();
                Console.WriteLine(Result);

    上面的代码中构建了基本HTML,然后在Body下面增加了Div。并在Div里增加了a和table。

    同时在Table里增加里三个TR

    输出如下:

    <html>
    <head>
    <meta charset="utf-8"></meta><title>
    Example </title>
    </head>
    <body>
    <div>
    <a href="/#"></a><table>
    <tr></tr><tr>
    SomeText </tr>
    <tr>
    <td></td></tr>
    </table>
    </div>
    </body>
    </html>

    有的时候想,既然这个库这么屌,不如再封装一层,做一个可以让用户在不懂HTML的情况下生产HTML的工具。

    准备再研究研究HSHarp这个库。据说还可以反序列化HTML

  • 相关阅读:
    (Bug修复)C#爬虫,让你不再觉得神秘
    C#高级特性(反射)
    Linux 宝塔部署 ASP.NET Core 应用
    WPF 的内部世界(Binding)
    渗透攻击红队内网靶场
    销量最优解
    遗传算法实现旅行商问题求解
    用java手写了个JSON解析&生成器
    Vue项目里面用a标签下载本地文件
    20192422李俊洁 实验六 Metasploit攻击渗透实践
  • 原文地址:https://www.cnblogs.com/mma2017/p/5600131.html
Copyright © 2020-2023  润新知