HtmlAgilityPack,获取带有标签的节点序列

时间:2013-01-17 21:44:24

标签: c# html-agility-pack

想象一下类似于此

的Html文档
   <div>
      <div>...</div>
      <table>...</table>
      <p>...</p>
      <p>...</p>
      <p>...</p>
      <table>...</table>
      <p>...</p>
      <div>...</div>
      <p>...</p>
      <p>...</p>
    </div>

我想采用第一段段落节点。我试图迭代p检查nextSibling的节点集合,直到找到与p不同的名称,但这始终是文本。

更具体地说,我想要的是从维基百科页面获取文本的第一部分。我的意思是,之前的所有段落都找到一个非段落,如内容表或其他页面上的页面结尾。在之前的示例中,我想将HtmlDocument与前三段一起使用。

我可以将此转换为字符串,然后使用IndexOf。但是,我更喜欢更通用的解决方案,因为我不知道我将在维基百科页面中找到什么。

1 个答案:

答案 0 :(得分:1)

您可以将SkipWhile和TakeWhile与div中的子项列表结合使用。

 var children = doc.DocumentNode.SelectNodes("/div/*");
 var paragraphs = children
      .SkipWhile(child => !string.Equals(child.Name, "p", StringComparison.OrdinalIgnoreCase))
      .TakeWhile(child => string.Equals(child.Name, "p", StringComparison.OrdinalIgnoreCase));