我试图从类库中的方法返回一个html字符串(不要问为什么)。我想在该方法中做的是从我的域中获取POCO的实例,然后打开一个html文档(可能来自一个文件,或者它可能是来自其他地方的字符串),然后将POCO传递给文档(绑定到POCOs属性),然后输出生成的html。
是否有一个很好的包装器可以在.NET框架中完成这项工作?我在HtmlDocument类上看到了这篇文章,但希望避免所有直接元素访问和赋值:
http://msdn.microsoft.com/en-us/library/system.windows.forms.htmldocument.aspx
答案 0 :(得分:0)
我的整体方法是使用适当的XML Serializer(DataContractSerializer或XmlSerializer)传递您的可序列化 POCO in,收到生成的XML;并使用XSLT样式表转换它以生成输出HTML。
转换管道看起来像这样
POCO ---- [XmlSerializer] - > XML ------- [XSLT] -----> HTML
答案 1 :(得分:0)
您可以使用模板引擎来实现此目的。第一步是定义包含对象属性值的占位符的HTML模板。然后使用模板和一个将产生最终结果的对象来提供模板引擎。以下是使用NVelocity的示例:
class Program
{
static void Main(string[] args)
{
Velocity.Init();
// Define a template that will represent your HTML structure.
var template = "<html><body><div>$key1</div><div>$key2.ToString('dd/MM/yyyy')</div></body></html>";
var context = new VelocityContext();
// The values you are passing here could be complex objects with many properties
context.Put("key1", "Hello World");
context.Put("key2", DateTime.Now);
var sb = new StringBuilder();
using (var writer = new StringWriter(sb))
using (var reader = new StringReader(template))
{
Velocity.Evaluate(context, writer, null, reader);
}
Console.WriteLine(sb.ToString());
// This will print: <html><body><div>Hello World</div><div>16/10/2009</div></body></html>
}
}