我有以下html字符串(不受我控制的html的简化版本)-
<html>
<head>
<title/>
</head>
<body>
<p>
Hello How are you doing?
</p>
</body>
</html>
并且我正在使用以下代码使用HtmlAgilityPack对其进行解析-
HtmlDocument htmlDoc = new HtmlDocument();
htmlDoc.LoadHtml(htmlStr);
但这是htmlDoc.DocumentNode.InnerHtml
<html>
<head>
<title></title></head></html>
您可以看到html没有正确解析。
在反复试验中,我注意到将html字符串中的<title/>
替换为<title></title>
时,文档已正确解析。
关于如何正确使用HAP解析此类html文档的任何想法/帮助吗?
小提琴链接-https://dotnetfiddle.net/CZv09l
修改:
源html字符串不在我的控制范围内,尽管在用HAP解析之前,我可以替换所有自闭<title/>
,但是我不确定是否可以对所有其他自闭标签这样做,如我所见HAP也无法与<p/>
配合使用。还是有一种快速方法将所有自闭合标签替换为其扩展版本? (我正在考虑这里的额外费用,因为在用户等待它们完成时,我可能需要处理约70个大型html文件)
有关<p/>
-https://dotnetfiddle.net/VGJ1G6的问题的提要链接
答案 0 :(得分:2)
您可以在源代码中找到解析html标签here的默认设置。更改<title>
标签的设置有助于解析您的html:
HtmlNode.ElementsFlags["title"] = HtmlElementFlag.Closed;
var htmlDoc = new HtmlDocument();
htmlDoc.LoadHtml(html);
Fiddler code.
同样,您可以轻松更改所有必需标签的默认行为。
还已经为<p>
标签定义了设置:
HtmlDocument.DisableBehaviorTagP = false; //false for automatically closing