使用.NET应用程序中的模板生成HTML [已关闭]

ztmd8pv5  于 2023-10-21  发布在  .NET
关注(0)|答案(6)|浏览(122)

已关闭,此问题需要更focused。它目前不接受回答。
**想改善这个问题吗?**更新问题,使其只关注editing this post的一个问题。

两年前关门了。
Improve this question
我有一个.NET控制台应用程序,需要生成一些HTML文件。我可以在StringBuilder中构造HTML并将内容写入文件,但我认为使用某种带有占位符的模板文件来表示数据的位置,然后在运行时通过它处理我的数据会更好。
我猜有一些方法可以使用aspx,或T4,或一些可以与ASP.NET MVC一起使用的替代视图引擎,但我不知道什么最容易集成到控制台应用程序中(或者我将如何集成它们)。
我希望最终能够调用以下形式的东西:

GenerateHtml(htmlPath, template, customDataObject);
6mzjoqzu

6mzjoqzu1#

一种方法是创建一个XSL文件作为模板,将customDataObject序列化为XML,然后执行转换以生成所需的HTML。

**更新:**虽然我喜欢(并且确实使用)这里其他人提倡的字符串替换方法,但使用XML/XSL有一定的灵活性。假设你的对象有一个列表属性,例如一个订单对象,它有一个行项目对象的列表,你几乎必须在代码中写入渲染行项目的逻辑。

使用XSL,您所要做的就是将序列化的订单对象XML传递给XSL,并让XSL处理它需要生成的任何HTML。这意味着您可以经常编辑XSL或变体(订单摘要,详细订单等),而无需向您的应用程序添加额外的代码,以及重建/部署的所有额外麻烦。
但这一切都取决于你需要呈现的内容的复杂性,对于某些作业来说字符串替换更明显,对于另一些作业来说XSL是一种方式。就像我说的,我们两个都用。

ryoqjall

ryoqjall2#

下面的代码演示了一种相当简单的方法来完成您要做的事情:

using System;
using System.IO;

public class HtmlTemplate
{
    private string _html;

    public HtmlTemplate(string templatePath)
    {
        using (var reader = new StreamReader(templatePath))
            _html = reader.ReadToEnd();
    }

    public string Render(object values)
    {
        string output = _html;
        foreach (var p in values.GetType().GetProperties())
            output = output.Replace("[" + p.Name + "]", (p.GetValue(values, null) as string) ?? string.Empty);
        return output;
    }
}

public class Program
{
    void Main()
    {
        var template = new HtmlTemplate(@"C:\MyTemplate.txt");
        var output = template.Render(new {
            TITLE = "My Web Page",
            METAKEYWORDS = "Keyword1, Keyword2, Keyword3",
            BODY = "Body content goes here",
            ETC = "etc"
        });
        Console.WriteLine(output);
    }
}

使用这个,你所要做的就是创建一些HTML模板,并用可替换的标记填充它们,比如[TITLE],[METAKEYWORDS]等。然后传入包含要替换标记的值的匿名对象。你也可以用一个字典或类似的东西来替换value对象。

o8x7eapl

o8x7eapl3#

有很多HTML模板引擎/生成器。
根据您的需要选择任何一个。
祝你好运

我选的是斯克里班

qnzebej0

qnzebej04#

正如Matt所提到的,spark很好,但对于一些简单的模板来说可能有点过头了,如果你不在MVC中使用它,它会变得复杂。
我个人在使用NVocity方面取得了很大的成功,我还发布了一个简单的示例/ Package 器:http://simpable.com/code/simpletemplate/
此外,GraffitiCMS的整个主题系统都运行在NVelocity上(尽管我会使用spark,如果它可用于此任务的话)。

  • 斯科特
ua4mk5z4

ua4mk5z45#

另一个选择是使用命名字符串格式化,而不是像Kev建议的那样使用命名字符串格式化。使用Phil Haack的代码like this example
在这里,您可以将模板作为字符串(可能从文件中读取),并使用给定的对象对其进行格式化。
现在你可以这样做:

var person = new { FirstName = "rune", LastName = "grimstad" };
string template = "<html><body><h1>Hello {FirstName} {LastName}</h1></body></html>";
string html = NamedFormat(template, person);
zengzsys

zengzsys6#

有几种方法,
1-使用视图引擎(Razor,Spark,.)-如果你使用mvc,这是很好的
2-Using XSLT file and transform the given xml to Htm l
3-Using T4 Text Templates(最佳性能,易于理解)

相关问题