WPF应用程序输出HTML

4
我正在创建一个基于c#的WPF应用程序,它将根据其输出创建html文件。是否有一种方法可以在桌面应用程序中使用asp.net mvc中的html“视图”概念,而无需重新发明轮子?基本上,我只想保存一个以HTML格式输出的项目列表,在Web应用程序中这很简单(甚至可以使用绑定在WPF桌面应用程序中显示窗口中的输出),但对于桌面应用程序中的HTML输出来说似乎很笨拙。我觉得如果为数据输出包含灵活的HTML模板,那么我会重复造轮子。

肯定有一种快速而优雅的方法来实现这一点吧?

例如,假设程序的输出是一个名称列表(Bill,Bob,Jill,Frank),我想将以下HTML文件保存到磁盘:

<html>
<body>
<ul>
<li>Bill</li>
<li>Bob</li>
<li>Jill</li>
<li>Frank</li>
</ul>
</body>
</html>

如果用户定义了一个HTML模板,例如:
<html>
<body>
<ul>
<li><!-- user name --></li>
</ul>
</body>
</html>

如果用户定义了类似以下代码,就可以在ASP.NET MVC中(或者在PHP、Ruby等语言中以非常类似的方式)完成此操作:
<html>
<body>
<ul>
    <% foreach (string name in NameList) { %>
        <li>
        <%: name %>
        </li>
    <% } %>
</ul>
</body>
</html>

我想知道在桌面应用程序中是否有一种简单的方法使用该方法创建html文件?

1个回答

2

将数据存储在可以轻松序列化为 XML 的形式中,可以使用实现 XML 序列化的类或 ADO.NET DataSet。编写 XSLT 模板以将 XML 转换为 XHTML。使用 XslCompiledTemplate 类实现转换。

当然,这种方法需要你学习一些你可能不太熟悉的内容。XSLT 并不简单,XML、XSLT 和 HTML 中都有细微的问题,随时可能会使你遇到困难。但是一旦学会了,这是一种非常强大的技术组合。我已经十年没有手工制作过 HTML 文档了;我必须制作任何 HTML 文档的起点都是包含其内容和 XSLT 转换以呈现内容的 XML 文档。

从 WPF 方面来看,您需要处理的唯一问题是在应用程序中显示呈现的 HTML。我已经有两种方法做过这个事情。一种方法是通过在一个 UserControl 中包装 WinForms WebBrowser 控件,并公开一个 Html 依赖属性,以便我可以将我的视图模型的 Html 属性绑定到它上面。 (视图模型都共享一个获取它们的 XML 并将其转换为 HTML 的帮助类。)

另一种更难的方法是完全绕过 HTML,并编写一个 XSLT 转换,以将数据呈现为 XAML 中的 FlowDocument。它并不比前一种方法更难,只是引入了许多新问题需要考虑 - 并且,如果生产 HTML 确实是您应用程序的全部内容,则可能完全不适合您的应用程序。但是一旦您知道如何将 XML 数据转换为 HTML,将其转换为 XAML 就易如反掌。


感谢您提供如此详细的回复并向我介绍XSLT。我以前没有使用过这些模板,但我认为在许多情况下我都能够利用它们!使用XSLT从XML转换到XAML有多难(比从xml到html难吗)?虽然它对我的当前项目没有帮助,但它似乎是标准化信息在Web应用程序和桌面应用程序中显示的好方法? - evan
将XML转换为XAML并不难。实际上,一旦您了解了XamlReader的工作原理,就可以使用XML-> XSLT-> XAML-> CLR对象管道执行许多有趣和酷炫的操作。如果您建议的部分存在困难,那就是弄清楚HTML / CSS与FlowDocument对象模型之间的实质差异。我没有详细研究过它,但我敢打赌这方面有很多内容。 - Robert Rossney

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接