HTML-рендеринг с помощью C#
-
20-09-2019 - |
Вопрос
Допустим, я сумасшедший и хочу реализовать базовый механизм рендеринга HTML с помощью C#.Я хотел бы использовать элементы управления WPF для отображения макета HTML.
Хотя от такой идеи нет никакой пользы, я все же хочу ее попробовать!Какие библиотеки, проекты и документация помогут мне в этом?
Решение
Поскольку возможности WPF XAML представляют собой расширенный набор возможностей HTML, практически все, что вам нужно сделать, — это сопоставить одно с другим.
Если вы вводите XHTML, вы можете просто использовать XSLT или LINQ-to-XML для получения данных.
Если вы используете XSLT, вы получите XAML, который вы анализируете с помощью XamlReader.Parse(), чтобы получить UIElement, который вы можете добавить в свое окно или другой контейнер WPF.Вероятно, это потребует больше усилий, чем использование LINQ-to-XML, поскольку возможности XSLT относительно ограничены.
Если вы используете LINQ-to-XML, вы можете создать XAML и затем проанализировать его, как в случае с XSLT, или вы можете просто создать дерево объектов напрямую.Если вы создаете XAML с использованием LINQ-to-XML, я бы написал фактический код перевода на VB.NET вместо C#, который является моим любимым языком.Синтаксис «XML Literal» VB.NET упрощает эту часть работы.
Если вы вводите произвольный HTML, а не XHTML, я бы использовал стороннюю библиотеку, чтобы преобразовать его в XHTML и работать оттуда.Обработка всех странностей синтаксического анализа HTML — это большая работа, которая, вероятно, по большей части не связана с вашей реальной целью.
Если вы просто хотите отображать HTML, не превращая его в объекты WPF, вы можете использовать элемент управления Frame.
Другие советы
Рендеринг HTML будет простым: просто конвертируйте его в файл xaml, и рендеринг должен быть довольно быстрым.Вы получите аппаратно-ускоренный браузер с красивым масштабированием и шрифтами.
Но как обращаться с CSS — вам нужно будет создавать стили (фу)?DHTML, HTML5 и Java-скрипт..Сейчас так много страниц требуют этих вещей, что вы даже не можете их просмотреть.
Самый простой способ для Java-скрипта — использовать синтаксический анализатор, который используют все, может быть, есть лучший способ (а Java-скрипт для компиляторов CIL?)
html-парсеры с типизированным сопоставлением с альтернативами xaml, интересно...возможно, вы можете использовать antlr для парсера лексера http://www.antlr.org/, точнее, вот интересный кодпроект, проект http://www.codeproject.com/KB/cs/TagBasedHtmlParser.aspx, возможно, вы могли бы попробовать преобразовать свой HTML в xaml, что было бы весьма интересно :)
Я думаю, что этот проект - именно то, чего вы стремитесь достичь:
https://htmlrenderer.codeplex.com/
Возможно, вы могли бы поработать над этим и добавить поддержку HTML 5 и CSS 3!