如何从WebBrowser控件中更正无效的HTML?

时间:2015-11-12 13:09:52

标签: html xml winforms webbrowser-control html-agility-pack

我使用WebBrowser Control作为文本编辑器。在用户输入或编辑了一些文本并关闭编辑器之后,我解析了属性webBrowser1.Document.Body.OuterHtml的内容,为另一个应用程序创建了一些文本对象。

然而,解析器只能使用有效的HTML,因为我认为,WebBrowser控件只能生成有效的HTML。不幸的是,在编辑器中进行了一些复制和粘贴,我能够生成以下HTML:

<BODY {...some Attributes...}>
    <P align=left>
        <FONT size=7>
            some text
            <FONT color=#00b700>
                more text
            </FONT>
            <FONT color=#ff0000>
                text
                <FONT size=7>
                    text
                    <FONT color=#00b700>
                        text
                    </FONT>
                    <FONT color=#ff0000>
                        text
                    </FONT>
                </FONT>
            </P>
        </FONT>
    </FONT>
</BODY>

正如您所看到的,关闭的p-Tag似乎与结束字体-Tag交换。在WebBrowser控件中,一切看起来都很好,但我编写的解析器无法处理HTML。 (在解析器中,我提取所有文本节点,并从每个文本节点爬上DOM树,直到我到达body-Node,沿途寻找文本格式)。另外HtmlAgilityPack表示p-Node的InnerHtml是空的。

是否有一些神奇的方法来自动更正“略微”无效的HTML?

1 个答案:

答案 0 :(得分:1)

经过进一步搜索后,我找到了http://corsis.sourceforge.net/index.php/Html2Xhtml

像魅力一样工作,正是我需要做的事情:

来自WebBrowser Control的Html:

<BODY >
    <P align=left>
        <FONT size=7>
            11111&nbsp;2222
            <FONT color=#00b700>

            </FONT>
            <FONT color=#ff0000>
                ?????
                <FONT size=7>
                    11111&nbsp;2222
                    <FONT color=#00b700>

                    </FONT>
                    <FONT color=#ff0000>
                        ?????
                    </FONT>
                </FONT>
            </P>
        </FONT>
    </FONT>
</BODY>

更正了Html2Xhtml:

<body>
    <p align=\"left\">
        <font size=\"7\">
            11111&nbsp;2222
            <font color=\"#00b700\">

            </font>
            <font color=\"#ff0000\">
                ????? 
                <font size=\"7\">
                    11111&nbsp;2222
                    <font color=\"#00b700\">

                    </font>
                    <font color=\"#ff0000\">
                        ?????
                    </font>
                </font>
            </font>
        </font>
    </p>
</body>

惊人!