使用 C# 渲染 HTML
假设我很疯狂,我想用 C# 实现一个基本的 HTML 渲染引擎。 我想使用 WPF 控件来显示 HTML 布局。
虽然这样的想法没有什么收获,但我还是想尝试一下!那么哪些库、项目和文档可以帮助我完成这项工作呢?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
假设我很疯狂,我想用 C# 实现一个基本的 HTML 渲染引擎。 我想使用 WPF 控件来显示 HTML 布局。
虽然这样的想法没有什么收获,但我还是想尝试一下!那么哪些库、项目和文档可以帮助我完成这项工作呢?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(4)
由于 WPF XAML 的功能是 HTML 功能的超集,因此您几乎需要做的就是将一个功能映射到另一个功能。
如果您的输入是 XHTML,您可以简单地使用 XSLT 或 LINQ-to-XML 来获取数据。
如果您使用 XSLT,您最终会得到一个 XAML,您可以使用 XamlReader.Parse() 对其进行解析,以获取可以添加到 Window 或其他 WPF 容器中的 UIElement。这可能比使用 LINQ-to-XML 需要更多的工作,因为 XSLT 相对有限。
如果您使用 LINQ-to-XML,您可以选择生成 XAML,然后像 XSLT 情况一样解析它,或者您可以直接创建对象树。如果您使用 LINQ-to-XML 创建 XAML,我会使用 VB.NET 而不是我通常首选的语言 C# 编写实际的翻译代码。 VB.NET 的“XML Literal”语法使这部分工作变得更加容易。
如果您的输入是任意 HTML 而不是 XHTML,我将使用第三方库将其转换为 XHTML 并从那里开始工作。处理所有 HTML 的解析异常是一项艰巨的工作,而且可能大部分与您的实际目标无关。
如果您只想显示 HTML 而不将其转换为 WPF 对象,则可以使用 Frame 控件。
Since WPF XAML's capabilities are a superset of HTML's capabilities, pretty much all you will need to do is map the one to the other.
If your input is XHTML you can simply use XSLT or LINQ-to-XML to get the data.
If you use XSLT you will end up with a XAML that you parse with XamlReader.Parse() to get a UIElement you can add to your Window or other WPF container. This is probably more work than using LINQ-to-XML because XSLT is relatively limited.
If you use LINQ-to-XML you can choose to produce XAML and then parse it as in the XSLT case, or you can just create the object tree directly. If you create XAML using LINQ-to-XML, I would write the actual translation code in VB.NET instead of C# which is my normal preferred language. VB.NET's "XML Literal" syntax makes that part of the job easier.
If your input is arbitrary HTML and not XHTML, I would use a third party library to convert it to XHTML and work from there. Handling all of HTML's parsing strangeness is a lot of work and probably mostly unrelated to your actual goal.
If you just want to display HTML without turning it into WPF objects, you can use the Frame control.
渲染 html 会很容易,只需转换为 xaml 文件,并且渲染应该相当快。您将获得具有漂亮的缩放和字体的硬件加速浏览器。
但是你如何处理 css - 你需要创建样式(恶心)? DHTML、HTML5 和 Java 脚本 .. 现在很多页面都需要这些东西,您甚至无法查看它们。
Java脚本的简单方法是使用每个人都使用的解析器,可能有更好的方法(Java脚本到CIL编译器?)
Rendering html will be easy just convert to xaml file and render should be quite fast. You will get a HW accelerated browser with beautiful zoom and fonts.
But how do you handle css - you will need to create styles ( Yuck) ? DHTML , HTML5 and Java script .. So many pages now require these thinsg you cant even view it.
The easy way for Java script is to use the parser everyone uses , there may be a better way ( and Java script to CIL compilers ?)
html 解析器,具有到 xaml 替代方案的类型化映射,有趣...也许您可以使用 antlr 作为解析器词法分析器 http:// /www.antlr.org/,更具体地说,这是一个有趣的代码项目,项目 http://www.codeproject.com/KB/cs/TagBasedHtmlParser.aspx,您也许可以尝试将html转换为xaml,这将非常有趣:)
html parsers, with a typed mapping to xaml alternatives, interesting... perhaps you can use antlr for the parser lexer http://www.antlr.org/, more specifically heres an interesting codeproject, project http://www.codeproject.com/KB/cs/TagBasedHtmlParser.aspx, you could perhaps try transform your html into xaml, which would be quite interesting :)
我认为这个项目正是您想要实现的目标:
https://htmlrenderer.codeplex.com/
也许您可以对其进行研究并添加 HTML 5 和 CSS 3 支持!
I think this project is exactly what you aim to achieve:
https://htmlrenderer.codeplex.com/
Maybe you could work on it and add HTML 5 and CSS 3 support!