我最近开始尝试使用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中的错误的一般过程非常复杂。