Генерация HTML с использованием шаблона из приложения .NET.

StackOverflow https://stackoverflow.com/questions/897226

  •  23-08-2019
  •  | 
  •  

Вопрос

У меня есть консольное приложение .NET, которому необходимо создать несколько файлов HTML.Я мог бы просто создать HTML в StringBuilder и записать содержимое в файл, но я подумал, что было бы лучше использовать какой-нибудь файл шаблона с заполнителями для размещения данных, а затем обрабатывать через него данные во время выполнения.

Я предполагаю, что есть способы использовать aspx, или T4, или некоторые альтернативные механизмы представления, которые вы можете использовать с ASP.NET MVC, но я не знаю, что было бы проще всего интегрировать в консольное приложение (или как Я бы их интегрировал).

Я хочу в конечном итоге иметь возможность вызывать что-то в форме:

 GenerateHtml(htmlPath, template, customDataObject);
Это было полезно?

Решение

Как упомянул Мэтт, Spark — это хорошо, но для некоторых простых шаблонов он может оказаться излишним и усложниться, если вы не используете его в MVC.

Лично я добился большого успеха с NVelocity, и я также публикую простой пример/оболочку по его использованию: http://simpable.com/code/simpletemplate/

Кроме того, вся система тем GraffitiCMS работает на NVelocity (хотя я бы использовал Spark, если бы он был доступен для этой задачи).

-Скотт

Другие советы

Один из способов сделать это — создать файл XSL в качестве шаблона, сериализовать ваш customDataObject как XML, затем выполните преобразование для создания требуемого HTML.

Обновлять: Хотя мне нравится (и я использую) метод замены строк, предложенный здесь другими людьми, в использовании XML/XSL есть определенная гибкость.Допустим, у вашего объекта есть свойство, представляющее собой список, например объект заказа со списком объектов отдельных позиций, вам в значительной степени придется встроить в свой код логику, которая должна отображать отдельные позиции.

При использовании XSL все, что вам нужно сделать, это передать XML-код сериализованного объекта заказа в XSL и позволить XSL обрабатывать любой HTML, который ему необходимо сгенерировать.Это означает, что вы часто можете редактировать XSL на месте или иметь варианты (сводка заказа, подробный заказ и т. д.), не добавляя дополнительный код в свое приложение со всеми дополнительными хлопотами по пересборке/развертыванию.

Но тут все зависит от сложности того, что вам нужно визуализировать, для некоторых задач замена строки более очевидна, для других подойдет XSL.Как я уже сказал, мы используем оба.

Вот код, иллюстрирующий довольно простой способ выполнить то, что вы пытаетесь сделать:

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] и т. д.Затем передайте анонимные объекты, содержащие значения для замены токенов.Вы также можете заменить объект значения словарем или чем-то подобным.

Проверить документ.Это использует механизм представления Spark для рендеринга шаблонного HTML из консольного приложения.Довольно просто.

Другой вариант вместо использования XSLT, как предлагает Кев, — использовать форматирование именованных строк.Использование кода как этот пример Фил Хаак.

Здесь вы можете сохранить свой шаблон в виде строки (возможно, прочитать из файла) и отформатировать его, используя данный объект.

Теперь вы можете сделать что-то вроде этого:

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

Есть несколько способов,

1- Использование механизма просмотра (Razor, Spark,...) – это хорошо, если вы используете MVC.

2- Использование файла XSLT и преобразование данного XML в Htmл

3- Использование текстовых шаблонов T4 (Лучшая производительность, легко понять)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top