用C#生成HTML的最干净的方法是什么?

时间:2018-07-16 07:15:44

标签: c#

我正在尝试制作一个将一个XML文件转换为HTML文件的C#程序,最明显的方法是使用override func viewDidLoad() { super.viewDidLoad() definesPresentationContext = true } 对象,但我要求使用6行编写一个标签,一个属性,一行内容和一个结束标签的代码。有没有更清洁/更有效的方法来做到这一点?

程序正在使用XML文件(由XML Schema定义的格式)来自定义HTML模板并使用数据填充。一个示例如下所示:

HtmlTextWriter

要编写诸如static string aFileName; static XmlDocument aParser; static HtmlTextWriter HTMLIOutput; static StringWriter HTMLIBuffer; static StreamWriter HTMLOutIFile; static HtmlTextWriter HTMLEOutput; static StringWriter HTMLEBuffer; static StreamWriter HTMLOutEFile; HTMLIBuffer = new StringWriter(); HTMLIOutput = new HtmlTextWriter(HTMLIBuffer); XmlElement feed = aParser.DocumentElement; HTMLIOutput.WriteBeginTag("em"); HTMLIOutput.WriteAttribute("class", "updated"); HTMLIOutput.Write(HtmlTextWriter.TagRightChar); HTMLIOutput.Write("Last updated: " + feed.SelectSingleNode("updated").InnerText.Trim()); HTMLIOutput.WriteEndTag("em"); HTMLIOutput.WriteLine(); HTMLIOutput.WriteLine("<br>"); 之类的东西,真的 是否需要有这么多不同的行来构成标签的一部分?

注意:是的,我可以直接将内容写入文件,但是如果可能的话,我希望使用更智能的方式,以减少人为错误。

3 个答案:

答案 0 :(得分:1)

您始终可以使用Obisoft.HSharp

    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);

System.Xml.Linq

    var html = new XElement("html",
    new XElement("head",
        new XElement("title", "My Page")
    ),
    new XElement("body",
        "this is some text"
    )
);

答案 1 :(得分:1)

使用像Razor这样的东西不适用于这里吗?因为如果您要使用视图引擎进行大量的html生成,则可以使其变得更加容易。它也可以在ASP.NET之外使用。

但是有时候这不是您所需要的。您是否考虑过使用.net(mvc)的TagBuilder类? System.Web.UI中也有HtmlWriter(用于Web表单)。如果您要制作geom_text()Controls,我会推荐其中一种。

答案 2 :(得分:1)

这是我的建议

  1. 将XML反序列化为C#对象
  2. 使用诸如RazorEngine之类的模板引擎来生成HTML

我过去使用RazorEngine生成电子邮件模板(HTML格式)。它们使用与ASP.NET MVC视图(.cshtml)类似的语法,甚至可以make intellisense works with the templates!而且,与XSLT或TagBuilder相比,模板更易于创建和维护。

请考虑以下模型:

public class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

您可以使用HTML模板创建字符串,也可以使用文件。我建议使用扩展名为.cshtml的文件,这样就可以突出显示语法和智能感知,如前所述:

Razor template with intellisense

模板文本如下:

@using RazorEngine.Templating
@using RazorDemo1
@inherits TemplateBase<Person>

<div>
    Hello <strong>@Model.FirstName @Model.LastName</strong>
</div>

加载模板并生成HTML:

using System;
using System.IO;

using RazorEngine;
using RazorEngine.Templating;

namespace RazorDemo1
{
    class Program
    {
        static void Main(string[] args)
        {
            string template = File.ReadAllText("./Templates/Person.cshtml");

            var person = new Person
            {
                FirstName = "Rui",
                LastName = "Jarimba"
            };

            string html = Engine.Razor.RunCompile(template, "templateKey", typeof(Person), person);

            Console.WriteLine(html);
        }
    }
}

输出:

<div>
    Hello <strong>Rui Jarimba</strong>
</div>