代码之家  ›  专栏  ›  技术社区  ›  Mark Heath

使用.NET应用程序中的模板生成HTML

  •  9
  • Mark Heath  · 技术社区  · 15 年前

    我有一个.NET控制台应用程序,需要生成一些HTML文件。我可以在StringBuilder中构造HTML并将内容写入文件,但我认为最好使用某种带有占位符的模板文件来表示数据的位置,然后在运行时通过它处理数据。

    我猜有一些方法可以使用aspx或T4,或者可以与ASP.NET MVC一起使用的其他视图引擎,但是我不知道什么最容易集成到控制台应用程序中(或者我将如何集成它们)。

    我希望最终能够调用以下形式的东西:

     GenerateHtml(htmlPath, template, customDataObject);
    
    6 回复  |  直到 15 年前
        1
  •  16
  •   erlando    15 年前

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

    虽然我喜欢(并且确实使用)这里其他人提倡的字符串替换方法,但使用XML/XSL有一定的灵活性。假设您的对象具有一个列表属性,例如一个带有行项目对象列表的order对象,您几乎必须在代码中烧录呈现行项目的逻辑。

    使用XSL,您只需将序列化的order对象XML传递给XSL,并让XSL处理它需要生成的任何HTML。这意味着您可以经常就地编辑XSL或拥有变体(订单摘要、详细订单等),而无需向您的应用程序添加额外的代码,从而避免重建/部署的所有额外麻烦。

        2
  •  9
  •   Nathan Ridley    15 年前

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

    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对象。

        3
  •  4
  •   Matt Hinze    15 年前

    docu . 信息技术 uses the Spark view engine to render templated HTML 从控制台应用程序。很简单。

        4
  •  3
  •   Scott Watermasysk    15 年前

    正如Matt所提到的,spark很不错,但是对于一些简单的模板来说,它可能有些过分,如果您不在MVC中使用它,它会变得复杂。

    我个人在NVelocity方面取得了很多成功,我还发布了一个简单的示例/包装器: http://simpable.com/code/simpletemplate/

    此外,涂鸦的整个主题系统都是在NVelocity上运行的(尽管如果这个任务可以使用spark的话,我会使用它)。

    -斯科特

        5
  •  2
  •   Rune Grimstad    15 年前

    另一种替代Kev所建议的XSLT的方法是使用命名字符串格式。使用代码 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);
    
        6
  •  2
  •   ADM-IT    3 年前

    有很多HTML模板引擎/生成器。

    根据你的需要随便挑一个。

    祝你好运

        7
  •  1
  •   Behzad    9 年前

    有几种方法,

    2- Using XSLT file and transform the given xml to Htm L

    3- Using T4 Text Templates (最佳性能,易于理解)