我最近开始尝试使用HtmlAgilityPack。我对它的所有选项都不熟悉,因此我认为自己做错了。

我有一个包含以下内容的字符串:

string s = "<span style=\"color: #0000FF;\"><</span>";

您会发现在我的范围内,我有一个“小于”符号。
我使用以下代码处理此字符串:
HtmlDocument htmlDocument = new HtmlDocument();
htmlDocument.LoadHtml(s);

但是当我像这样跨度快速又脏的样子时:
htmlDocument.DocumentNode.ChildNodes[0].InnerHtml

我看到范围是空的。

我需要设置保持“小于”符号的什么选项。我已经尝试过了:
htmlDocument.OptionAutoCloseOnEnd = false;
htmlDocument.OptionCheckSyntax = false;
htmlDocument.OptionFixNestedTags = false;

但没有成功。

我知道它是无效的HTML。我正在使用它来修复无效的HTML,并在“小于”符号上使用HTMLEncode

请指引我正确的方向。提前致谢

最佳答案

Html Agility Packs将其检测为错误,并为其创建一个HtmlParseError实例。您可以使用HtmlDocument类的ParseErrors读取所有错误。因此,如果您运行以下代码:

    string s = "<span style=\"color: #0000FF;\"><</span>";
    HtmlDocument doc = new HtmlDocument();
    doc.LoadHtml(s);
    doc.Save(Console.Out);

    Console.WriteLine();
    Console.WriteLine();

    foreach (HtmlParseError err in doc.ParseErrors)
    {
        Console.WriteLine("Error");
        Console.WriteLine(" code=" + err.Code);
        Console.WriteLine(" reason=" + err.Reason);
        Console.WriteLine(" text=" + err.SourceText);
        Console.WriteLine(" line=" + err.Line);
        Console.WriteLine(" pos=" + err.StreamPosition);
        Console.WriteLine(" col=" + err.LinePosition);
    }

它将显示以下内容(首先显示已更正的文本,然后显示有关错误的详细信息):
<span style="color: #0000FF;"></span>

Error
 code=EndTagNotRequired
 reason=End tag </> is not required
 text=<
 line=1
 pos=30
 col=31

因此,您可以尝试修复此错误,因为您拥有所有必需的信息(包括行,列和流位置),但是修复(不检测)HTML中的错误的一般过程非常复杂。

10-08 00:22