有没有办法解析无效的HTML?

时间:2011-10-10 12:27:59

标签: c# .net xml

我需要在整个文件的随机行中解析包含多个随机元素(如BODY)的无效HTML文件。 我试图将其解析为XML,但没有运气,因为这个文件也有无效的XML结构(文件中随机元素中的许多不正确的属性)。 HtmlAgilityPack也无法读取此文件。它只是在第一个不正确的元素之前读取文件而在它之后没有任何内容。

以下是此类文件的小例子:

<HTML>
<HEAD>
    <TITLE>My title</TITLE>
</HEAD>
<BODY leftmargin=9 topmargin=7 >
    <TABLE>
        <TR>
            <TD>Test</TD>
        </TR>
        <TR>
            <TD>Test</TD>
            <TD>Test<TD>
        </TR>
            <BODY> <-- This is the point where HtmlAgilityPack is stuck --!>
                <TR>
                    <TD>Test</TD>
                    <TD>Test</TD>
                </TR>
                <TR>
            </BODY>
        <TR>
        <TD><FONT>Test</FONT></TD>
        </TR>
    </TABLE>
</BODY>

我正在尝试解析该表中的信息。

3 个答案:

答案 0 :(得分:4)

让Internet Explorer为您付出艰苦的努力 - 它会尽力将破坏的标记结构“修复”为它理解的东西(这是技术上有效的XML,具有正确的标记配对等)。

WebBrowser(或Windows.Controls.WebBrowser中打开HTML,如果您更喜欢WPF库),然后您可以通过Document属性浏览DOM。无论原始来源多么破碎,DOM总是正确的。

不需要第三方图书馆。

答案 1 :(得分:3)

我们使用Html Agility Pack解析了包含无效html的网页。我记得它做得很好。

答案 2 :(得分:0)

您可以使用SgmlReader。当然,如果你的html文件非常不正确,它对你没用。