我正在尝试制作一个将一个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>");
之类的东西,真的 是否需要有这么多不同的行来构成标签的一部分?
注意:是的,我可以直接将内容写入文件,但是如果可能的话,我希望使用更智能的方式,以减少人为错误。
答案 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)
这是我的建议
我过去使用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的文件,这样就可以突出显示语法和智能感知,如前所述:
模板文本如下:
@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>