HtmlAgilityPack特定标签的段内容

时间:2017-06-19 13:37:38

标签: c# html .net html-agility-pack

所以,假设我有一个html文档看起来像这样:

<h1>Segment1</h1>
<p>Segment1Text</p>
<p>Segment1MoreText</p>
<ul><li>Segment1BulletText</li></ul>
<h1>Segment2</h1>
<p>Segment2Text</p>
<p>Segment2MoreText</p>
<ul><li>Segment2BulletText</li></ul> 
<h1>Segment3</h1>
<p>Segment3Text</p>
<p>Segment3MoreText</p>
<ul><li>Segment3BulletText</li></ul> 

使用HTMLAgilityPack我需要创建一个函数,根据我传入此函数的分割模式将html分割为HTMLNodeCollections。

  • 所以我可以有一个模式,我说在每个h1标签处分开(返回3个html节点集合)。
  • 我可以使用另一种分割模式,即在h1标记处分割,然后是p标记(返回3个html节点集合)..
  • 当我们有一个h1标签后面跟着一个p标签,然后是另一个p标签(返回3个html节点集合)时,另一个模式就是分裂。等......

这个函数需要是可扩展的,因为我传入的html段总是不同的,因此我总是需要为它提供不同的模式以便分割html。

1 个答案:

答案 0 :(得分:0)

.Descendants()是你的朋友(如果你不想使用XPATH)。

关于第一个问题:只需使用Descendants("h1")

第二个问题:这样的事情会起作用doc.DocumentNode.Descendants("h1").Where(p => p.NextSibling.NextSibling.Name === "p"); //我在这里做了一个技巧,因为中间总是有一个文本节点。这可能不是最好的解决方案,只是为了展示想法。

第3个问题:与第2个问题相同,只需再获得1个NextSibling()