丢失HtmlAgilityPack loadhtml中的"小于"符号

Tur*_*Bas 8 html c# html-agility-pack

我最近开始尝试使用HtmlAgilityPack.我不熟悉它的所有选项,我认为因为我做错了.

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

string s = "<span style=\"color: #0000FF;\"><</span>";
Run Code Online (Sandbox Code Playgroud)

你看,在我的范围内,我有一个"小于"的标志.我使用以下代码处理此字符串:

HtmlDocument htmlDocument = new HtmlDocument();
htmlDocument.LoadHtml(s);
Run Code Online (Sandbox Code Playgroud)

但是当我在这样的范围内做一个快速而肮脏的外观时:

htmlDocument.DocumentNode.ChildNodes[0].InnerHtml
Run Code Online (Sandbox Code Playgroud)

我看到跨度是空的.

我需要设置什么选项来维持"小于"的符号.我已经尝试过了:

htmlDocument.OptionAutoCloseOnEnd = false;
htmlDocument.OptionCheckSyntax = false;
htmlDocument.OptionFixNestedTags = false;
Run Code Online (Sandbox Code Playgroud)

但没有成功.

我知道它是无效的HTML.我使用它来修复无效的HTML并在'小于'符号上使用HTMLEncode

请指导我正确的方向.提前致谢

Sim*_*ier 3

Html Agility Pack 将此检测为错误并为其创建一个 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);
    }
Run Code Online (Sandbox Code Playgroud)

它将显示以下内容(首先显示更正的文本,然后显示有关错误的详细信息):

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

Error
 code=EndTagNotRequired
 reason=End tag </> is not required
 text=<
 line=1
 pos=30
 col=31
Run Code Online (Sandbox Code Playgroud)

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