HtmlAgilityPack无法使用<title />解析html

时间:2019-12-23 16:51:23

标签: c# html html-agility-pack

我有以下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的问题的提要链接

1 个答案:

答案 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